上篇文章中写了appcache的manifest文件如何书写,appcache的类型和状态,下面我们通过这篇文章来学习下appcache的下载和更新机制。
浏览器自动更新
1.假如入我们要访问一个网站的主页,它的html标签有个manifest属性。
2.页面从服务器端返回,包括动态资源和静态资源,同时静态资源会采用浏览器常规的缓存方式缓存起来。
3.当浏览器解析页面时,发现他的html标签有一个manifest属性,浏览器会在后台把manifest文件中要cache片段所指定
的资源下载并缓存在application cache中(在这种情况cache中的资源会再次下载)
4.这时候如果你把浏览器设置为离线浏览【
Regular caching is also in effect, so watch for false positives here.】
你在manifest文件的network片段中指定需要联网访问的资源,这时会不可用,但是在cache片段的资源没有影响,
注意:在opare和firefox中可以通过【文件---脱机】工作,把浏览器设为离线模式,在chrome和safari中没有这样的设置,
但是可以通过代理来达到同样的目的
4.1 这时候你访问cache中的资源,会直接从appcache中取得缓存中的内容
4.2这时候你访问network中的资源,会显示fallback中指定的资源
下面你如果取消离线模式,重新连上网,后续的过程如下
1.返回线上模式
2.你在服务器端改变一个文件的内容【如cache.html】
3.这时候重新加载cache.html,页面上会显示从appcache中加载的原来的内容,即使你联网了,内容仍然没有改变,这是因为
一旦一个文件在appcache中缓存,以后会永远呈现第一次记载的内容,
4.这时候浏览器会检查manifest文件是否更新,如果没有更新,就不会做任何事。
注意:只有manifest文件改变,缓存中要更新的文件才能更新
5.更新menifest文件
最佳实践:一般通过注释的方式为manifest文件增加版本号,一旦文件更改,就需要修改版本号。
6.你重新加载cache.html
7.浏览器仍然从缓存中加载老的内容,缓存中更改的内容这时并没有呈现。
8.浏览器检查manifest是否更新,这时manifeset文件更新了,他会通过浏览器常规缓存检查文件的状态,有可能是304或者200
注意:
这里检查所有文件的状态,比较耗性能,这里有个比较不错的
解决方案
9.这时缓存会被重新更新,当下次再从新刷新页面,就会看到更新的内容。
脚本手动更新
在上篇文章中我们介绍了appcache的可能的各种状态,那么当appcache处于这些状态时会触发哪些事件呢,其实浏览器已经向我们暴漏了相应
的事件,通过监听这些事件我们做相应的处理:
同样我们可以通过applicationCache的status属性拿到appcache的各个状态:
最后就可以通过监听application cache的状态和属性来手动更新缓存
注意:通过swapCache()方法更新appcache以后必须再重新加载页面才能真正看到更新的内容。
到此为止我们已经介绍完了所有有关appcache的内容,在下篇文章中我们回来看看在实际的开发中到底如何才能更好的使用
application cache.