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 相关文章推荐
Prototype源码浅析 String部分(三)之HTML字符串处理
Jan 15 Javascript
不提示直接关闭网页窗口的JS示例代码
Dec 17 Javascript
深入理解javascript变量声明
Nov 20 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
Sep 04 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
Dec 03 Javascript
详解Weex基于Vue2.0开发模板搭建
Mar 20 Javascript
简单的JS控制button颜色随点击更改的实现方法
Apr 17 Javascript
Node.js中Bootstrap-table的两种分页的实现方法
Sep 18 Javascript
细说webpack源码之compile流程-入口函数run
Dec 26 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
Feb 03 Javascript
@angular前端项目代码优化之构建Api Tree的方法
Dec 24 Javascript
vue将data恢复到初始状态 &amp;&amp; 重新渲染组件实例
Sep 04 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添加Xdebug扩展的方法
2014/02/12 PHP
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
php实现的RSS生成类实例
2015/04/23 PHP
php中二分法查找算法实例分析
2016/09/22 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
PHP中的self关键字详解
2019/06/23 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
JQuery从头学起第一讲
2010/07/04 Javascript
jquery 插件开发备注
2010/08/27 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
Javascript学习笔记之 对象篇(三) : hasOwnProperty
2014/06/24 Javascript
jQuery验证插件 Validate详解
2014/11/20 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
在python中的socket模块使用代理实例
2014/05/29 Python
python刷投票的脚本实现代码
2014/11/08 Python
在Python的web框架中配置app的教程
2015/04/30 Python
python机器学习之决策树分类详解
2017/12/20 Python
对python中的xlsxwriter库简单分析
2018/05/04 Python
pycharm 在windows上编辑代码用linux执行配置的方法
2018/10/27 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
Tensorflow中的dropout的使用方法
2020/03/13 Python
使用Python实现批量ping操作方法
2020/05/06 Python
Python中内建模块collections如何使用
2020/05/27 Python
Python爬虫实现百度翻译功能过程详解
2020/05/29 Python
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
2014年领导班子专项整治整改方案
2014/09/28 职场文书
个人合伙协议书范本
2014/10/14 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
领导参观欢迎词
2015/01/26 职场文书
致运动员赞词
2015/07/22 职场文书
2016中考冲刺决心书
2015/09/22 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书