Progressive Web Apps(PWA)核心技术-使用Cache API

上篇文章介绍了文件的缓存,这里我们介绍一下Cache API的属性和方法。

检查浏览器是否支持Cache API

if('caches' in window){
  //支持
}

创建缓存

caches.open('example-cache').then(function(cache) {
        //创建一个名为example-cache的缓存并返回一个cache对象
});

Cache API提供了很多创建和处理缓存中的数据的方法。

创建数据

这里有三种方法将数据添加到缓存中:
1、add
add方法获取一个URL,获取它,并将生成的响应对象添加到给定的缓存中。

caches.open('example-cache').then(function(cache) {
        cache.add('/example-file.html');
});

2、addAll
此方法与add相同,只不过它需要一个数组并将其添加到缓存中。 如果有任何文件无法添加到缓存中,则整个操作将失败,并且不会添加任何文件。

caches.open(cacheName).then(function(cache) {
      return cache.addAll(
        [
          '/css/bootstrap.css',
          '/css/main.css',
          '/js/bootstrap.min.js',
          '/js/jquery.min.js',
          '/offline.html'
        ]
      );
    })

3、put
这个方法同时使用请求和响应对象,并将它们添加到缓存中。

fetch(url).then(function (response) {
  return cache.put(url, response);
})

匹配数据
匹配数据有两种方法:match和matchAll。

caches.match(request,options) - 此方法返回一个Promise,该Promise解析为与缓存或缓存中第一个匹配请求关联的响应对象。 如果找不到匹配,它将返回undefined。 第一个参数是请求,第二个参数是可选的选项列表,用于优化搜索。 以下是由MDN定义的选项:

  • ignoreSearch:一个布尔值,指定是否忽略URL中的查询字符串。 例如,如果设置为true,则执行匹配时将忽略http://foo.com/?value=bar的?value = bar部分。 它默认为false。
  • ignoreMethod:布尔值,当设置为true时,阻止匹配操作验证请求HTTP方法(通常只允许GET和HEAD)。默认为false。
  • ignoreVary:布尔值,当设置为true时,表示匹配操作不执行VARY头匹配 - 也就是说,如果URL匹配,则无论Response对象是否具有VARY头,都会得到匹配结果。 它默认为false。
  • cacheName:表示要在其中进行搜索的特定缓存的DOMString。 请注意,该选项被Cache.match()忽略。

caches.matchAll(request,options) - 此方法与.match相同,不同的是它从缓存中返回所有匹配的响应而不是第一个。 例如,如果您的应用程序缓存了图像文件夹中包含的某些图像,则可以返回所有图像并对其执行一些操作:

caches.open('example-cache').then(function(cache) {
  cache.matchAll('/images/').then(function(response) {
    response.forEach(function(element, index, array) {
      cache.delete(element);
    });
  });
})

删除数据

我们可以用cache.delete(request,options)删除缓存中的项目。 此方法找到与请求匹配的缓存中的项目,将其删除,并返回一个解析为true的Promise。 如果找不到该项目,则会解析为false。 它也具有与匹配方法相同的可选选项参数。

检索缓存键
我们可以使用cache.keys(request,options)获取缓存键列表。 这将返回一个可解析为缓存键数组的Promise。 这些将按照插入缓存的顺序返回。 这两个参数是可选的。 如果没有传递,cache.keys将返回缓存中的所有请求。 如果请求成功,它将从缓存中返回所有匹配的请求。 可选项与前面的方法相同。

keys方法也可以在缓存入口点上调用,以返回缓存本身的缓存键。 这可以让您一次性清除过期的缓存。

参考链接:
1.https://developer.mozilla.org/en-US/docs/Web/API/Cache
2.https://developers.google.com/web/ilt/pwa/caching-files-with-service-worker#using_the_cache_api

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,273评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,349评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,709评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,520评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,515评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,158评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,755评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,660评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,203评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,287评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,427评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,122评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,801评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,272评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,393评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,808评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,440评论 2 359

推荐阅读更多精彩内容