JavaScript中的cacheStorage使用详解


Posted in Javascript onJuly 29, 2015

localStorage 应是家喻户晓的?但本地存储这个家族可远不止它。以前扯过 sessionStorage,现在还有个神奇的 CacheStorage。它用来存储 Response 对象的。也就是说用来对 HTTP ,响应做缓存的。虽然 localStorage 也能做,但是它可能更专业。

CacheStorage 在浏览器上的引用名叫 caches 而不是驼峰写法的 cacheStorage,它定义在 ServiceWorker 的规范中。CacheStorage 是多个 Cache 的集合,而每个 Cache 可以存储多个 Response 对象。

废话不能说再多,下面是 demo

<script>
caches.delete('c1');
caches.delete('c2');
Promise.all([
 caches.open('c1').then(function(cache) {
  return cache.put('/hehe', new Response('aaa', { status: 200 }));
 }),
 caches.open('c2').then(function(cache) {
  return cache.put('/hehe', new Response('bbb', { status: 200 }));
 })
]).then(function() {
 return caches.match('/hehe');
}).then(function(response) {
 return response.text();
}).then(function(body) {
 console.log(body);
});
</script>

首先,在 caches 上调用 open 方法就可以异步地得到一个 Cache 对象的引用。在这个对象上我们可以把 Response 对象 put 进去(参数是一个 URL 和一个 Response 对象)、用 match 方法取出(传入一个 URL 取出对应的 Response 对象)。

match 方法不仅可以在 Cache 上调用 CacheStorage 上也有 match 方法,比如上面例子就打开了两个 Cache,都写入一个叫 /hehe 的 URL。在写入操作完成之后,到外部的 CacheStorage 上调用 match 方法来匹配 /hehe,结果是随机的(没找到这个规则在哪里定义的)。

虽然上面的例子中只对 Cache 对象 put 了一个数据,而 Cache 对象本身可以存放更多的 URL/Response 对。并且提供了 delete(用户删除)、keys(用于遍历)等方法。但是 Cache 并不像 localStorage 一样有 clear 方法,如果非要清空一个 Cache,可以直接在 CacheStorage 上把整个 Cache 给 delete 掉再重新 open。

这套 API 和 ServiceWorker 一家的,它通常被用于 ServiceWorker 中,整个设计风格也和 ServiceWorker 一样都基于 Promise。

Javascript 相关文章推荐
js 对象是否存在判断
Jul 15 Javascript
js截取字符串的两种方法及区别详解
Nov 05 Javascript
Javascript中获取对象的原型对象的方法小结
Feb 25 Javascript
JS实用的动画弹出层效果实例
May 05 Javascript
JavaScript中使用Math.floor()方法对数字取整
Jun 15 Javascript
jQuery简单注册和禁用全局事件的方法
Jul 25 Javascript
JavaScript里 ==与===区别详解
Aug 16 Javascript
JS中实现函数return多个返回值的实例
Feb 21 Javascript
ReactNative实现Toast的示例
Dec 31 Javascript
微信小程序整合使用富文本编辑器的方法详解
Apr 25 Javascript
Vue + Elementui实现多标签页共存的方法
Jun 12 Javascript
vue 开发之路由配置方法详解
Dec 02 Javascript
JavaScript中数组继承的简单示例
Jul 29 #Javascript
小议JavaScript中Generator和Iterator的使用
Jul 29 #Javascript
浅析Node.js的Stream模块中的Readable对象
Jul 29 #Javascript
浅谈Javascript数组的使用
Jul 29 #Javascript
举例讲解Node.js中的Writable对象
Jul 29 #Javascript
浅谈Javascript数组索引
Jul 29 #Javascript
JQ实现新浪游戏首页幻灯片
Jul 29 #Javascript
You might like
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
php返回当前日期或者指定日期是周几
2015/05/21 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
JS模拟多线程
2007/02/07 Javascript
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
JavaScript与DOM组合动态创建表格实例
2012/12/23 Javascript
javascript利用控件对windows的操作实现原理与应用
2012/12/23 Javascript
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
js 对小数加法精度处理示例说明
2013/12/27 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
vue非父子组件通信问题及解决方法
2018/06/11 Javascript
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
IE11下处理Promise及Vue的单项数据流问题
2019/07/24 Javascript
vue自定义指令实现仅支持输入数字和浮点型的示例
2019/10/30 Javascript
Python中http请求方法库汇总
2016/01/06 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
Python 实现两个列表里元素对应相乘的方法
2018/11/14 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
继承公证书样本
2014/04/04 职场文书
2015大学生实训报告
2014/11/05 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
关于PHP数组迭代器的使用方法实例
2021/11/17 PHP