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实现单一html页面两套css切换代码
Apr 11 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
Apr 20 Javascript
利用JS延迟加载百度分享代码,提高网页速度
Jul 01 Javascript
使用js操作cookie的一点小收获分享
Sep 03 Javascript
浅析JS中document对象的一些重要属性
Mar 06 Javascript
jquery+php实现搜索框自动提示
Nov 28 Javascript
javascript中活灵活现的Array对象详解
Nov 30 Javascript
bootstrap手风琴折叠示例代码分享
May 22 Javascript
更改BootStrap popover的默认样式及popover简单用法
Sep 13 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
Dec 25 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
Jan 19 Javascript
javascript创建元素和删除元素实例小结
Jun 19 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更新mysql后获取改变行数的方法
2014/12/25 PHP
Laravel5.1自定义500错误页面示例
2016/10/09 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
JS实现图片横向滚动效果示例代码
2013/09/04 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
2015/05/09 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
通过javascript进行UTF-8编码的实现方法
2016/06/27 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
JavaScript 截取字符串代码实例
2019/09/05 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python设计实现的计算器功能完整实例
2017/08/18 Python
Pycharm设置界面全黑的方法
2018/05/23 Python
python中plot实现即时数据动态显示方法
2018/06/22 Python
详解python中Numpy的属性与创建矩阵
2018/09/10 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
使用Python串口实时显示数据并绘图的例子
2019/12/26 Python
python中如何写类
2020/06/29 Python
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
局部内部类是否可以访问非final变量?
2013/04/20 面试题
介绍一下Linux中的链接
2016/06/05 面试题
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
护士毕业生自荐信
2014/02/07 职场文书
北体毕业生求职信
2014/02/28 职场文书
文明寝室标语
2014/06/13 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
毕业班班主任工作总结2015
2015/07/23 职场文书
企业团队精神心得体会
2016/01/19 职场文书