html5的离线存储的研究(1)——appcache

前几天因为维护的一个vue移动端项目,出现了一个问题,在ios webview下,无论怎么修改都没有更新,后来排查了下原因。是缓存的问题,使用webpack后在每一个js文件后加上了一个hash值。
通过这一次的排查,让我对html5的缓存,引发了极大的兴趣。
通过网上的查找,我发现,html5的缓存技术新增了有以下两种,一种是localstorage,还有一种是appcache。传统的还有一种是cookie。localstorage的话已经是很熟悉了,在项目中也经常熟练地使用setItem和getItem方法。至于这个appcache不是很熟悉。

优势

HTML5引入了这项技术,意味着web应用可进行缓存,并在没有网络的情况下使用。Application Cache带来的三个优势是:

  1. 离线浏览

  2. 提升页面载入速度

  3. 降低服务器压力

而且主要浏览器皆以支持Application Cache,就算不支持也不会对程序造成什么影响

使用

使用appcache的话,需要在index.html下,也就是项目目录下,新建一个类似于cache.manifest的manifest文件并在index.html下的html标签内新增manifest属性

<!DOCTYPE HTML>
<html manifest = "cache.manifest">
...
</html>

总结一下就是在html中引入一个minifest的文件,该文件声明了哪些文件应该被缓存,哪些文件不会被缓存
格式如下

CACHE MANIFEST
#v0.11 首次下载后进行缓存的,一般会写版本号

CACHE:
#需要被缓存的文件
js/app.js
css/style.css

NETWORK:
#不需要被缓存的文件
resourse/logo.png

FALLBACK:
#表示如果访问第一个资源失败,那么就使用第二个资源来替换他,比如上面这个文件表示的就是如果访问根目录下任何一个资源失败了,那么就去访问offline.html。
/ /offline.html

注意点

1.在cache.manifest下应当写明版本号,并且对本文件不做缓存处理,因为如果服务器对离线资源进行了更新,那么必须更新manifest文件之后这些资源才能被浏览器重新下载,如果只是更新了资源而没有更新manifest文件的话,浏览器并不会重新下载资源,也就是说还是使用原来离线存储的资源。
2.如果服务器资源更新了,那么浏览器会一次性下载所有更新资源,如果下载过程中失败,那么这次所有更新都算是失败的。浏览器还会使用以前的资源。

  1. 浏览器会先使用离线资源加载页面,然后再去检查manifest是否有更新,所以需要到下次打开页面才能生效。

总结

从可用性与易用性来说,Application Cache是最好是做静态的公共资源的缓存,尽量不去缓存业务资源。感觉离真正的缓存之路还是比较遥远的。

更新

以前查的资料都是大牛以前的博客上看来的,这一次为了看一些api去mdn上观看了官方的解释https://developer.mozilla.org/zh-CN/docs/Web/HTML/Using_the_application_cache

已废弃
该特性已经从 Web 标准中删除,虽然一些浏览器目前仍然支持它,但也许会在未来的某个时间停止支持,请尽量不要使用该特性。

在此刻使用这里描述的应用程序缓存功能高度不鼓励; 它正在处于从Web平台中被删除的过程。请改用Service Workers 代替。事实上,在Firefox 44中,当AppCache用于为页面提供离线支持时,控制台中现在显示一条警告消息,建议开发人员改用 Service workers 代替 (bug 1204581)。
所以,尽量不使用啦!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,986评论 19 139
  • 转载:H5缓存机制浅析-移动端Web加载性能优化【干货】 作者:贺辉超,腾讯游戏平台与社区产品部 高级工程师 目录...
    meng_philip123阅读 11,567评论 6 48
  • 0. 前言 前面有被用户投诉 APP 流量消耗厉害: 于是乎考虑了流量方面的问题。暂时 APP 中涉及流量的几个方...
    zyl06阅读 24,296评论 5 63
  • 关于html5的离线存储,大致可分为: localStorage, sessionStorage indexedD...
    月下江流阅读 984评论 0 0
  • 残叶乱绕枝飞,轻雨亲寒溏。 雁有情,南归还欲顾,只恨秋意凉。 忽思君,情切切,奈何不知何时往。 整顿衣...
    落兮03阅读 266评论 3 2