浅谈JavaScript的Polymer框架中的behaviors对象


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 面向对象思想 附源码
Jul 07 Javascript
IE之动态添加DOM节点触发window.resize事件
Jul 27 Javascript
jQuery对象的length属性用法实例
Dec 27 Javascript
javascript异步编程代码书写规范Promise学习笔记
Feb 11 Javascript
JavaScript 计算笛卡尔积实例详解
Dec 02 Javascript
JS自定义函数实现时间戳转换成date的方法示例
Aug 27 Javascript
详解plotly.js 绘图库入门使用教程
Feb 23 Javascript
使用vuex存储用户信息到localStorage的实例
Nov 11 Javascript
微信小程序实现发微博功能的示例代码
Jun 24 Javascript
vue中的循环对象属性和属性值用法
Sep 04 Javascript
详解JavaScript中的链式调用
Nov 27 Javascript
微信小程序实现录音Record功能
May 09 Javascript
JavaScript中的cacheStorage使用详解
Jul 29 #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
You might like
php算开始时间到过期时间的相隔的天数
2011/01/12 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
微信公众号开发之微信公共平台消息回复类实例
2014/11/14 PHP
PHP发送短信代码分享
2015/08/11 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
2016/02/19 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
修复ie8&amp;chrome下window的resize事件多次执行
2011/10/20 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
Javascript变量作用域详解
2013/12/06 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
JavaScript中常用的六种互动方法示例
2015/03/13 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
js验证真实姓名与身份证号是否匹配
2015/10/13 Javascript
分析js闭包引起的事件注册问题
2016/03/29 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
简单理解vue中实例属性vm.$els
2016/12/01 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
微信小程序wepy框架笔记小结
2018/08/08 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
说说Vuex的getters属性的具体用法
2019/04/15 Javascript
ES6的解构赋值实例详解
2019/05/06 Javascript
vue中v-for循环选中点击的元素并对该元素添加样式操作
2020/07/17 Javascript
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
浅析python中的分片与截断序列
2016/08/09 Python
numpy.transpose对三维数组的转置方法
2018/04/17 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
2019/06/27 Python
《跟踪台风的卫星》教学反思
2014/04/10 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
中学校园广播稿
2015/08/18 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
Html5新增了哪些功能
2021/04/16 HTML / CSS