缓存让前端飞

浏览器缓存机制2-应用缓存

2015-03-15  本文已影响239人  __七把刀__

浏览器缓存机制2-应用缓存

在公司项目中,一些移动版的WEB页面恰好用到了应用缓存,故顺便写篇文章来总结下应用缓存方面的内容。

1.应用缓存简介

应用缓存(application cache)是HTML5提供的一套缓存机制,使得WEB应用可以离线运行。除了一些旧版本的IE外,现代浏览器如firefox,chrome,safari大部分都是支持HTML5标准的。使用应用缓存主要优势有:

2.应用缓存配置

要开启应用缓存,需要在web页面的html标记中加上manifest属性,如下是我的测试页面test.html代码:

<html manifest="test.appcache">
  <head><title>appcache</title></head>
  <body>test appcache<img src="/test.gif"></img></body>  
</html>

其中test.appcache文件为缓存清单文件(cache manifest),缓存的资源都是在这个清单文件指定。使用了应用缓存后,加载资源的流程是这样的(摘自参考资料1):

为了方便测试,如果需要清除离线缓存,chrome可以通过设置中的清除浏览器数据或者直接访问chrome://appcache-internals/来清除,其他浏览器参照参考资料1.

3.缓存清单文件

一个典型的缓存清单文件test.appcache如下:

CACHE MANIFEST
# v1 - 2015-03-14 23:23
# This is a comment.
CACHE:
test.html
nomanifest.html

NETWORK:
*

FALLBACK:
/fallback fallback.html

缓存清单文件第一行必须是CACHE MANIFEST,然后可以加上注释(以#开头)。此外就是三个段落标题,含义如下:

段落标题 说明
CACHE 显示记录,下面列表是需要切换到应用缓存的显示资源
NETWORK 网络记录,需要从网络访问的白名单列表
FALLBACK 后备记录,请求资源失败时使用

一个应用缓存至少会包含一个资源,由 URI 指定。所有资源除了上面提到的显示记录,网络记录,后备记录外,还有一个类别叫主记录。下面一一来看一下:

1)显示记录

每行都是一个合法的URI与一个要缓存的资源相关联(本段落内不允许通配符)。每行的URI前后允许出现空白字符。显示记录是显示指定的需要加入到应用缓存的资源列表,比如上面示例的test.appcache中需要显示缓存的文件为test.html,nomanifest.html。注意的是,不是所有的文档html属性都要加manifest属性,比如我这个列表里面的nomanifest.html文档就没有manifest属性,但是只要有包含manifest属性的文档被访问后,就会自动加入到应用缓存。

2)网络记录

每一行都是一个合法URI,该段落可以用通配符,比如上面的*,指示了除了应用缓存中之外的资源需要通过网络获取。如果这里不设置的话,那么没有在应用缓存中的资源就无法访问。比如我这里如果不指定NETWORK的话,则test.gif这个图片就无法访问到。

3)后备记录

每一行都是一个合法URI(与一个资源关联),当指定的资源无法访问时访问后面的关联资源。比如访问/fallback或者它的子路径比如/fallback/child路径时,如果没有对应的资源,则会访问fallback.html.

4)主记录

主记录是指html标签中包含了manifest属性的文档,比如下面的main.html。主记录即便没有在显示记录中列出,也会在访问时加入到应用缓存。如main.html作为主记录,虽然没有在CACHE列表中,但是在访问的时候,同样会被加入到应用缓存中。

#main.html
<html manifest="test.appcache">
  <head><title>main</title></head>
  <body>main html</body>
</html>

4.缓存状态(摘自参考资料1)

function onUpdateReady() {
  alert('found new version!');
}
window.applicationCache.addEventListener('updateready', onUpdateReady);
if(window.applicationCache.status === window.applicationCache.UPDATEREADY) {
  onUpdateReady();
}

5.总结

Flags   URL Size (headers and data)
Fallback,   http://localhost/fallback.html  295 B
Master, http://localhost/main.html  703 B
Explicit,   http://localhost/nomanifest.html    305 B
Manifest,   http://localhost/test.appcache  419 B
Explicit,   http://localhost/test.html  732 B
Master, http://localhost/test.html?name=test    732 B

6.参考资料

使用应用缓存(参考了大部分内容并原文摘抄不少内容,向原作者表示感谢)

上一篇下一篇

猜你喜欢

热点阅读