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代码[多浏览器兼容]
Jun 07 Javascript
ExtJS[Desktop]实现图标换行示例代码
Nov 17 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
Dec 22 Javascript
jQuery包裹节点用法完整示例
Sep 13 Javascript
js原生跨域_用script标签的简单实现
Sep 24 Javascript
Bootstrap基本布局实现方法详解
Nov 25 Javascript
AngularJS入门教程一:路由用法初探
May 27 Javascript
搭建一个Koa后端项目脚手架的方法步骤
May 30 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
Jan 02 Javascript
js+canvas实现简单扫雷小游戏
Jan 22 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
Apr 30 Javascript
JavaScript实现网页下拉菜单效果
Nov 20 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 生成饼图 三维饼图
2009/09/28 PHP
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
Javascript类库的顶层对象名用户体验分析
2010/10/24 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
javascript实现网页背景烟花效果的方法
2015/08/06 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
js处理包含中文的字符串实例
2017/10/11 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
vue cli升级webapck4总结
2018/04/04 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
2018/09/10 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
python中的代码编码格式转换问题
2015/06/10 Python
python Celery定时任务的示例
2018/03/13 Python
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
2018/06/07 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
HTML5实现QQ聊天气泡效果
2017/06/26 HTML / CSS
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
高性能装备提升营地:Kammok
2019/02/27 全球购物
什么是设计模式
2012/06/17 面试题
介绍一下except的用法和作用
2015/01/22 面试题
什么时候需要进行强制类型转换
2016/09/03 面试题
关于迟到的检讨书
2014/01/26 职场文书
体育活动总结范文
2014/05/04 职场文书
效能监察建议书
2014/05/19 职场文书
面试必备的求职信
2014/05/25 职场文书
幼师求职自荐信
2014/05/31 职场文书
二十年同学聚会感言
2015/07/30 职场文书