离线缓存是H5中新增的属性,从字面上就可以知道它的意思就是将文件
缓存到本地,即使在断网的状态下也不影响正常使用。目前来看,除了古董浏览器大部分对于离线缓存的支持还是不错的,具体情况如下图:
那么浏览器究竟是如何对离线缓存的资源进行管理和加载的呢?有线情况下,浏览器会识别html标签中的manifest属性从而请求它包含的文件。在第一次打开应用的情况下,浏览器会根据manifest中的文件下载资源并缓存到本地;如果已经访问过资源并且缓存成功了,浏览器会先判断manifest文件是否更新从而决定使用哪一份缓存文件,如果文件改变就会重新下载并进行缓存。相反地,在离线情况下浏览器会直接读取缓存的内容并进行渲染。
好啦,巴拉了这么多现在要开始使用了。
H5的html标签中新增了manifest属性,它允许指定要缓存的manifest文件,(注:manifest文件时以.manifest后缀结尾的 )这样就把html和manifest连接起来了。接下来就是主角manifest文件了,它的格式如下:
CACHE MANIFEST
#version 1.1
CACHE:
http://cdn.bootcss.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css
http://cdn.bootcss.com/jquery/3.2.1/jquery.min.js
http://cdn.bootcss.com/bootstrap/4.0.0-alpha.6/js/bootstrap.js
NETWORK:
*
FALLBACK:
404.html
第一行的CACHE MANIFEST是固定格式,必须写在前面,表明这是一个
离线缓存文件。基本格式分为三段,即CACHE、NETWORK以及FALLBACK
。
1、#号开头的是注释,通常写明版本号或时间戳,这在manifest更新时很有用, 它用来在缓存文件更新时修改manifest。
2、CACHE(必须),manifest的核心,即需要离线缓存的文件路径。可以是 绝对路径也可是相对路径甚至是SDN线上地址。这里面的文件在有线状态第一次加载时会缓存到本地。
3、NETWORK(可选),表示绕过缓存的文件,即需要联网使用的文件。通常设置为*,表明除了CACHE中的文件其它的均要联网使用。
4、FALLBACK(可选),备胎选项,即当资源无法访问时要替代的页面。注意:这里必须使用相对路径且备胎文件要与manifest文件同域
现在已经可以使用离线缓存了,那么如何对其进行更新呢?有如下三种方式
- 更新manifest文件
- 清除浏览缓存
- 通过js控制
前面两种很好理解,清除浏览器缓存即将缓存中的文件清除,下一次打开app时会重新渲染;而在manifest中新增或删除文件也会更新缓存,这时#中的版本就会用来更新缓存。
浏览器提供了一个window.applicationCache方法来手动更新离线缓存,通过以下代码可将源码与manifest连接,一旦源码改变则会触发新的缓存。
window.applicationCache.addEventListener('updateready', function(e) {
if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
window.applicationCache .swapCache();
if (confirm('A new version of this site is available. Load it?')) {
window.location.reload();
}
} else {
//不更新
}
}, false);