背景
离线缓存是HTML5提供的新功能。利用HTML5提供的离线缓存功能可以将站点的一些常用的文件缓存到本地,在没有网络的情况下依旧可以访问缓存的页面。可以被缓存的文件类型有很多,包括但不限于html,css,js,静态图片资源等。
事实上,离线缓存不仅仅在没有网络的情况下会被使用,当有网络的情况下,本地缓存过的文件依旧会被优先使用。有网络的情况下,浏览器会返回200,
离线缓存有很多好处。第一,可以有效提高用户体验,节约用户流量。第二,可以提高页面加载速度,已缓存的资源加载的更快。第三,可以减少服务器负载,浏览器将只从服务器下载更新过或者更改过的资源。
浏览器支持
基本上所有的主流浏览器都支持,除了 IE,毕竟奇葩,像这种浏览器,还是不要去兼容了。
Manifest
要想在页面上使用离线缓存,只需要在页面的html 加入一个manifest属性,使用方法如下。
<!DOCTYPE HTML> <html manifest = "cache.appcache"> <body>…</body> </html>
当浏览器加载页面的时候,发现html上面拥有属性mannifest,就会去请求cache.appcache文件(ps:这只是一个文件名,一般约定以。appcache结尾,文件一般放在项目的根目录下)
btw: mannifest这个文件需要配置 MIME-type为 “text/cache-manifest”,这是必须的。你需要在服务器上进行配置。
我们来看一下manifest这个文件(cache.appcache)应该怎么写
我从w3School找到了这些资料 :
CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存
NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓存
FALLBACK - 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)
cache.appcache文件如下
# CACHE MANIFEST是必须的! CACHE MANIFEST /style.css /logo.png /app.js # 不缓存的文件,永远不会被缓存,且离线时是不可用的 NETWORK: login.js # 可以使用星号来指示所有其他资源/文件都需要因特网连接: NETWORK: * # 注释:获取不到资源时的备选路径,就跳转到指定页面 FALLBACK: index.html 404.html
怎么更新缓存
如同文章开始时说的那样,浏览器发现html上有manifest文件时会先去请求cache.appcache文件,再根据manifest文件的内容进行缓存。具体的流程如下
在线情况下,如果是第一次访问应用,浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储。如果已经访问过应用并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的manifest文件与旧的manifest文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。
而离线情况下,浏览器就直接使用本地的缓存。 有没有发现一个问题,如果我们更新代码了之后,浏览器还是使用了原来的缓存怎么办。
最简单粗暴的方式就是手动清除浏览器的缓存,这当然很大程度在生产环境上是不会这样处理的。
修改manifest的方式
以 “#” 开头的是注释行,但也可满足其他用途。应用的缓存会在其 manifest 文件更改时被更新。如果您编辑了一幅图片,或者修改了一个 JavaScript 函数,这些改变都不会被重新缓存。更新注释行中的日期和版本号是一种使浏览器重新缓存文件的办法。
以上就是HTML5缓存机制是什么?怎么更新缓存的详细内容,更多请关注自由互联其它相关文章!