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 相关文章推荐
javascript 检测浏览器类型和版本的代码
Sep 15 Javascript
jquery如何把参数列严格转换成数组实现思路
Apr 01 Javascript
jquery的clone方法应用于textarea和select的bug修复
Jun 26 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
Aug 02 Javascript
简单谈谈ES6的六个小特性
Nov 18 Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
Mar 02 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
Jul 24 Javascript
Bootstrap 中data-[*] 属性的整理
Mar 13 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
Feb 20 Javascript
JavaScript实现文件下载并重命名代码实例
Dec 12 Javascript
es6函数name属性功能与用法实例分析
Apr 18 Javascript
如何HttpServletRequest文件对象并储存
Aug 14 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
DSP接收机前端设想
2021/03/02 无线电
简体中文转换为繁体中文的PHP函数
2006/10/09 PHP
基于PHP常用字符串的总结(待续)
2013/06/07 PHP
php_screw 1.5:php加密: 安装与使用详解
2013/06/20 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
js 设置选中行的样式的实现代码
2010/05/24 Javascript
ie支持function.bind()方法实现代码
2012/12/27 Javascript
javascript eval(func())使用示例
2013/12/05 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
JavaScript获取URL汇总
2015/06/08 Javascript
基于js实现checkbox批量选中操作
2016/11/22 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
详解Vue路由自动注入实践
2019/04/17 Javascript
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
通过js示例讲解时间复杂度与空间复杂度
2019/08/06 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
python list排序的两种方法及实例讲解
2017/03/20 Python
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
解决Python下imread,imwrite不支持中文的问题
2018/12/05 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
详解HTML5将footer置于页面最底部的方法(CSS+JS)
2018/10/11 HTML / CSS
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
模具设计与制造专业推荐信
2014/02/16 职场文书
探亲假请假条
2014/04/11 职场文书
2014年检验员工作总结
2014/11/19 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
大学生支教感言
2015/08/01 职场文书
2015年教师节广播稿
2015/08/19 职场文书