应用缓存 AllicationCache
浏览器本身的缓存机制
- 浏览器会对静态文件(html,css,js,图片等)进行自动缓存
- 下次访问该网页,会读取缓存
- 读取缓存之前进行判断,第一次判断缓存时间和服务器上传文件的最后一次修改时间。
- 如果缓存时间大于最后一次修改时间,证明缓存之后,服务器上没有对文件进行修改,此时,浏览器会直接读取缓存文件
- 如果缓存时间小于最后一次修改时间,证明缓存之后,服务器又对对文件进行修改,此时,浏览器会重新下载服务器上的静态文件,并重新进行缓存
应用缓存的优点
- 进行离线浏览
- 速度,已缓存资源加载得更快
- 减少服务器负载,浏览器将只从服务器下载更新过或修改过的资源
Cache Manifest
- manifest属性:如果启用应用程序缓存,在文档的
<html>
标签中包含manifest属性,每个指定了manifest的页面在用户对其访问时都会被缓存。如果未指定 manifest 属性,则页面不会被缓存(除非在 manifest 文件中直接指定了该页面)。 - manifest 文件的建议的文件扩展名是:".appcache"。
- 在html中使用属性
manifest
引入 manifest文件 - 请注意,manifest 文件需要配置正确的 MIME-type,即 "text/cache-manifest"。必须在 web 服务器上进行配置。
- Manifest文件
- manifest 文件是简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容)。
- manifest 文件可分为三个部分:
- CACHE - 在此标题下列出的文件将在首次下载后进行缓存
- NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓存
- FALLBACK - 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)
如:
CACHE MANIFEST
#version: 0.0.1
缓存文件.html
缓存文件.css
NETWORK:
不缓存的文件.html
FALLBACK:
404.html
-
更新缓存
- 一旦应用被缓存,它就会保持缓存直到发生下列情况:用户清空浏览器缓存;manifest 文件被修改;由程序来更新应用缓存
- 一旦文件被缓存,则浏览器会继续展示已缓存的版本,即使您修改了服务器上的文件。为了确保浏览器更新缓存,您需要更新 manifest 文件。
applicationCache对象
- 属性
- status 返回缓存的状态
- 方法
- update() 发起应用缓存下载进程
- abort() 取消正在进行的缓存下载
- swapcache() 切换成本地最新的缓存环境
- 事件
- checking 用户代理检测更新或者在第一次尝试下载manifest文件的时候,本事件往往是第一个触发的
- noupdate 检测出manifest文件没有更新
- downloading 用户代理发现更新并且正在取资源,或者第一次下载manifest文件列表中列举的资源
- progress 用户代理正在下载资源manifest文件中的需要缓存的资源
- updateready manifest中列举的文件已经重新下载并更新成功,接下来js可以使用swapCache()方法更新到应用程序中
- error
- absolete manifest的请求出现404或者410错误,应用程序缓存被取消
WebRTC
- WebRTC是“网络实时通信”(Web Real Time Communication)的缩写,它主要用来让浏览器实时获取和交换视频、音频和数据。
作用
- 调用系统的摄像头和麦克风
使用
-
navigator.getUserMedia(options, success, error)
- streams:表示包括哪些多媒体设备的对象
- success:回调函数,获取多媒体设备成功时调用,接受一个MediaStream的实例作为参数
- error:回调函数,获取多媒体设备失败时调用,接受一个error对象作为参数
-
options
{ video:true/false, audio:true/false }
MediaStream
成功后的回调函自动传入该对象作为参数
触摸屏的事件
事件类型
- touchstart
- touchend
- touchmove
touchEvent
- targetTouches 属性 获取touchlist对象,一个 TouchList 对象,是包含了如下触点的 Touch 对象:触摸起始于当前事件的目标 element 上,并且仍然没有离开触摸平面的触点. 只读属性.
touchList
- 表示所有touch对象的集合
- 一个touch对象表示一个触摸点
touch对象
*clientX 触点相对于可见视区(visual viewport)左边沿的的X坐标. 不包括任何滚动偏移. 只读属性.
*clientY 触点相对于可见视区(visual viewport)上边沿的的Y坐标. 不包括任何滚动偏移. 只读属性.
*pageX 触点相对于HTML文档左边沿的的X坐标. 当存在水平滚动的偏移时, 这个值包含了水平滚动的偏移. 只读属性.
*pageY 触点相对于HTML文档上边沿的的Y坐标. 当存在水平滚动的偏移时, 这个值包含了垂直滚动的偏移. 只读属性.
*screenX
*screenY
*....