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 相关文章推荐
jquery判断单个复选框是否被选中的代码
Sep 03 Javascript
juqery 学习之四 筛选过滤
Nov 30 Javascript
onclick与listeners的执行先后问题详细解剖
Jan 07 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
Jun 19 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
Jan 12 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
Apr 18 Javascript
利用NPM淘宝的node.js镜像加速nvm
Mar 27 Javascript
Vue结合Video.js播放m3u8视频流的方法示例
May 04 Javascript
vue+iview/elementUi实现城市多选
Mar 28 Javascript
微信小程序云开发如何使用云函数生成二维码
May 18 Javascript
layui自己添加图片按钮并点击跳转页面的例子
Sep 14 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
Aug 18 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具体实现代码
2010/10/12 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
php格式化电话号码的方法
2015/04/24 PHP
php实现的操作excel类详解
2016/01/15 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
在页面加载完成后通过jquery给多个span赋值
2014/05/21 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
AngularJS service之select下拉菜单效果
2017/07/28 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
JS中appendChild追加子节点无效的解决方法
2018/10/14 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
2019/05/01 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
微信小程序缓存过期时间的使用详情
2019/05/12 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
js+h5 canvas实现图片验证码
2020/10/11 Javascript
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python程序设计入门(1)基本语法简介
2014/06/13 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
2018/07/18 Python
扩展Django admin的list_filter()可使用范围方法
2019/08/21 Python
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
应用服务器有那些
2012/01/19 面试题
大学生职业生涯十年规划书范文
2014/09/17 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis