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 判断指定字符串是否为有效数字
May 11 Javascript
JQuery扩展插件Validate 5添加自定义验证方法
Sep 05 Javascript
解析jQuery与其它js(Prototype)库兼容共存
Jul 04 Javascript
JavaScript日期类型的一些用法介绍
Mar 02 Javascript
jquery实现简单的轮换出现效果实例
Jul 23 Javascript
React实现点击删除列表中对应项
Jan 10 Javascript
使用node打造自己的命令行工具方法教程
Mar 26 Javascript
详解处理bootstrap4不支持远程静态框问题
Jul 20 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
May 01 Javascript
深入探索VueJS Scoped CSS 实现原理
Sep 23 Javascript
vue如何使用外部特殊字体的操作
Jul 30 Javascript
Node与Python 双向通信的实现代码
Jul 16 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/07/05 PHP
PHP中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
jquery 设置元素相对于另一个元素的top值(实例代码)
2013/11/06 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
微信小程序实现折叠与展开文章功能
2018/06/12 Javascript
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
Python字典深浅拷贝与循环方式方法详解
2020/02/09 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
什么是URL
2015/12/13 面试题
如何提高MySql的安全性
2014/06/19 面试题
高级护理专业毕业生推荐信
2013/12/25 职场文书
补充协议书范本
2014/04/23 职场文书
实习公司领导推荐函
2014/05/21 职场文书
体育系毕业生自荐信
2014/06/28 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
JS前端可扩展的低代码UI框架Sunmao使用详解
2022/07/23 Javascript