Service Worker入门

作者:信息技术

连不上网?大不列颠及英格兰联合王国卫报的特性离线页面是那般做的

2015/11/20 · HTML5 · Service Worker, 离线页面

本文由 伯乐在线 - Erucy 翻译,weavewillg 校稿。未经许可,禁绝转发!
罗马尼亚语出处:Oliver Ash。招待加入翻译组。

咱俩是怎么运用 service worker 来为 theguardian.com 创设一个自定义的离线页面。

图片 1

theguardian.com 的离线页面。插图:Oliver Ash

您正在朝着公司途中的客车里,在手提式有线电电话机上张开了 Guardian 应用。大巴被隧道包围着,可是那一个应用可以平常运转,固然未有网络连接,你也能收获完全的功效,除了体现的源委也有一点旧。假若您品尝在网址上也这么干,缺憾它完全没办法加载:

图片 2

安卓版 Chrome 的离线页面

Chrome 中的那些彩蛋,很五个人都不明了》

Chrome 在离线页面上有个藏匿的游戏(桌面版上按空格键,手提式有线电话机版上点击那只恐龙),那有些能缓和一点您的烦心。可是大家得以做得更加好。

Service workers 允许网址笔者拦截自个儿站点的持有网络央求,那也就表示大家能够提供周全的离线体验,就如原生应用同样。在 Guardian 网址,大家近日上线了八个自定义的离线体验效果。当客户离线的时候,他们会看见一个富含Guardian 标记的页面,上边带有二个简练的离线提示,还会有多个填字游戏,他们得以在等待网络连接的时候玩玩那几个找点乐子。那篇博客解释了大家是如何构建它的,可是在始发此前,你能够先本身研究看。

行使 Service worker 创立二个极其简单的离线页面

2016/06/07 · JavaScript · 1 评论 · Service Worker

本文由 伯乐在线 - 刘健超-J.c 翻译,艾凌风 校稿。未经许可,禁绝转发!
德文出处:Dean Hume。款待加入翻译组。

让我们想像以下场景:大家那儿在一辆通往农村的轻轨上,用移动设备望着一篇很棒的稿子。与此同时,当您点击“查看越来越多”的链接时,轻轨溘然步入了隧道,导致运动道具失去了互连网,而 web 页面会展现出类似以下的原委:

图片 3

那是一对一令人黯然的经验!幸运的是,web 开拓者们能经过一些新特点来创新那类的顾客体验。作者近年一贯在折腾 ServiceWorkers,它给 web 带来的数不胜数也许性总能给自己惊奇。Service Workers 的精美国特工职员质之一是允许你检查实验网络央浼的地方,并让您作出相应的响应。

在那篇小说里,笔者策动用此本性检查客户的脚下网络连接意况,借使没连接则赶回贰个最棒简单的离线页面。就算那是贰个至极基础的案例,但它能给您带来启迪,让您知道运维并运维该个性是何其的大约!要是您没了然过 Service Worker,作者提出您看看此 Github repo,通晓更加的多相关的信息。

在此案例开始前,让大家先轻松地拜会它的工作流程:

  1. 在客户第三遍访谈我们的页面时,大家会安装 ServiceWorker,并向浏览器的缓存增添大家的离线 HTML 页面
  2. 下一场,假如客户希图导航到另一个 web 页面(同四个网址下),但此刻已断网,那么咱们将回到已被缓存的离线 HTML 页面
  3. 可是,假若客商准备导航到另外八个 web 页面,而那时互联网已连续,则能照常浏览页面

Service Worker入门

2015/03/26 · JavaScript · Service Worker

原稿出处: Matt Gaunt   译文出处:[w3ctech

  • 十年踪迹]()   

原生App具有Web应用普通所不富有的富离线体验,定期的默默无言更新,音讯通告推送等功效。而新的Serviceworkers规范让在Web App上富有这一个意义成为也许。

试试看

您须求贰个支撑 Service Worker 和 fetch API 的浏览器。停止到本文编写时独有Chrome(手提式有线电话机版和桌面版)同临时候援救那二种 API(译者注:Opera 目前也支撑这两个),可是 Firefox 异常的快就要帮助了(在每天更新的本子中一度支撑了),除此而外 Safari 之外的有着浏览器也都在尝试。其它,service worker 只可以登记在使用了 HTTPS 的网址上,theguardian.com 已经开首慢慢搬迁到 HTTPS,所以我们不得不在网址的 HTTPS 部分提供离线体验。就当下的话,大家挑选了 开荒者博客 作为大家用来测验的地点。所以假诺你是在我们网址的 开荒者博客 部分阅读这篇小说的话,很幸运。

当您利用补助的浏览器访谈大家的 开辟者博客 中的页面包车型地铁时候,一切就筹划安妥了。断开你的网络连接,然后刷新一下页面。假让你和睦没条件尝试的话,可以看一下这段 示范录像(译者注:需梯子)。

让大家开头吧

一旦你有以下 HTML 页面。那纵然十一分基础,但能给你完整思路。

XHTML

<!DOCTYPE html>

1
<!DOCTYPE html>

继之,让大家在页面里登记 瑟维斯 Worker,这里仅创设了该指标。向正要的 HTML 里增多以下代码。

JavaScript

<script> // Register the service worker // 注册 service worker if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/service-worker.js').then(function(registration) { // Registration was successful // 注册成功 console.log('ServiceWorker registration successful with scope: ', registration.scope); }).catch(function(err) { // registration failed :( // 注册战败 :( console.log('ServiceWorker registration failed: ', err); }); } </script>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script>
// Register the service worker
// 注册 service worker
if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/service-worker.js').then(function(registration) {
    // Registration was successful
    // 注册成功
    console.log('ServiceWorker registration successful with scope: ', registration.scope);
}).catch(function(err) {
    // registration failed :(
    // 注册失败 :(
    console.log('ServiceWorker registration failed: ', err);
   });
}
</script>

然后,大家必要创设 Service Worker 文件并将其取名字为‘service-worker.js‘。大家图谋用这些 Service Worker 拦截任何互联网供给,以此检查互连网的连接性,并基于检查结果向顾客重返最符合的内容。

JavaScript

'use strict'; var cacheVersion = 1; var currentCache = { offline: 'offline-cache' + cacheVersion }; const offlineUrl = 'offline-page.html'; this.addEventListener('install', event => { event.waitUntil( caches.open(currentCache.offline).then(function(cache) { return cache.addAll([ './img/offline.svg', offlineUrl ]); }) ); });

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
'use strict';
 
var cacheVersion = 1;
var currentCache = {
  offline: 'offline-cache' + cacheVersion
};
const offlineUrl = 'offline-page.html';
 
this.addEventListener('install', event => {
  event.waitUntil(
    caches.open(currentCache.offline).then(function(cache) {
      return cache.addAll([
          './img/offline.svg',
          offlineUrl
      ]);
    })
  );
});

在地方的代码中,大家在设置 Service Worker 时,向缓存增多了离线页面。假若大家将代码分为几小块,可观察前几行代码中,作者为离线页面钦定了缓存版本和UEscortL。假设你的缓存有分歧版本,那么您只需创新版本号就可以简单地铲除缓存。在差非常的少在第 12 行代码,小编向这些离线页面及其财富(如:图片)发出诉求。在获取成功的响应后,我们将离线页面和有关财富丰裕到缓存。

今昔,离线页面已存进缓存了,大家可在须求的时等候检查索它。在同叁个 ServiceWorker 中,大家须求对无互联网时回来的离线页面增加相应的逻辑代码。

JavaScript

this.addEventListener('fetch', event => { // request.mode = navigate isn't supported in all browsers // request.mode = naivgate 并从未获得全部浏览器的支撑 // so include a check for Accept: text/html header. // 由此对 header 的 Accept:text/html 举办把关 if (event.request.mode === 'navigate' || (event.request.method === 'GET' && event.request.headers.get('accept').includes('text/html'))) { event.respondWith( fetch(event.request.url).catch(error => { // Return the offline page // 再次来到离线页面 return caches.match(offlineUrl); }) ); } else{ // Respond with everything else if we can // 再次回到任何大家能回来的东西 event.respondWith(caches.match(event.request) .then(function (response) { return response || fetch(event.request); }) ); } });

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
this.addEventListener('fetch', event => {
  // request.mode = navigate isn't supported in all browsers
  // request.mode = naivgate 并没有得到所有浏览器的支持
  // so include a check for Accept: text/html header.
  // 因此对 header 的 Accept:text/html 进行核实
  if (event.request.mode === 'navigate' || (event.request.method === 'GET' && event.request.headers.get('accept').includes('text/html'))) {
        event.respondWith(
          fetch(event.request.url).catch(error => {
              // Return the offline page
              // 返回离线页面
              return caches.match(offlineUrl);
          })
    );
  }
  else{
        // Respond with everything else if we can
        // 返回任何我们能返回的东西
        event.respondWith(caches.match(event.request)
                        .then(function (response) {
                        return response || fetch(event.request);
                    })
            );
      }
});

为了测量检验该意义,你能够动用 Chrome 内置的开荒者工具。首先,导航到您的页面,然后一旦设置上了 ServiceWorker,就开拓 Network 标签并将节流(throttling)改为 Offline。(译者注:若将节流设置为 Offline 没效果,则可透过关闭网络可能经过360有惊无险警卫禁绝 Chrome 访谈网络)

图片 4

假若您刷新页面,你应该能看出相应的离线页面!

图片 5

若是你只想大致地质度量试该意义而不想写任何代码,那么您能够访问笔者已创立好的 demo。其余,上述总体代码能够在 Github repo 找到。

笔者精晓用在此案例中的页面很简短,但您的离线页面则决计于你协和!假诺你想浓厚该案例的内容,你可感觉离线页面增添缓存破坏( cache busting),如: 此案例。

Service Worker 是什么?

贰个 service worker 是一段运维在浏览器后台进程里的脚本,它独自于这段日子页面,提供了那多少个无需与web页面交互的机能在网页背后悄悄推行的本事。在今日,基于它能够兑现音讯推送,静默更新以及地理围栏等服务,可是近些日子它首先要享有的功用是挡住和拍卖互联网伏乞,包罗可编制程序的响应缓存处理。

为何说这么些API是一个十分屌的API呢?因为它使得开采者能够支撑特别好的离线体验,它赋予开辟者完全调整离线数据的力量。

在service worker建议从前,别的叁个提供开荒者离线体验的API叫做App Cache。然则App Cache有个别局限性,举个例子它可以很轻巧地消除单页应用的主题材料,可是在多页应用上会很艰苦,而Serviceworkers的产出便是为了减轻App Cache的痛点。

上边详细说一下service worker有如何要求注意的地方:

  • 它是JavaScript Worker,所以它不能一直操作DOM。可是service worker能够通过postMessage与页面之间通讯,把消息文告给页面,假诺需求的话,让页面自个儿去操作DOM。
  • Serviceworker是贰个可编制程序的网络代理,允许开荒者调控页面上管理的互连网央求。
  • 在不被运用的时候,它会融洽终止,而当它再也被用到的时候,会被另行激活,所以你无法借助于service worker的onfecth和onmessage的处理函数中的全局状态。假如你想要保存一些持久化的新闻,你能够在service worker里使用IndexedDB API。
  • Serviceworker大批量使用promise,所以借使您不驾驭什么是promise,那你供给先读书这篇文章。

干活规律

通过一段轻松的 JavaScript,大家可以提醒浏览器在客商访谈页面包车型的士时候立时登记大家温馨的 service worker。方今帮忙 service worker 的浏览器少之甚少,所感觉了防止不当,大家供给使用性情检验。

JavaScript

if (navigator.serviceWorker) { navigator.serviceWorker.register('/service-worker.js'); }

1
2
3
if (navigator.serviceWorker) {
    navigator.serviceWorker.register('/service-worker.js');
}

Service worker 安装事件的一有个别,大家能够运用 新的缓存 API 来缓存大家网址中的各个内容,例如 HTML、CSS 和 JavaScript:

JavaScript

var staticCacheName = 'static'; var version = 1; function updateCache() { return caches.open(staticCacheName + version) .then(function (cache) { return cache.addAll([ '/offline-page.html', '/assets/css/main.css', '/assets/js/main.js' ]); }); }; self.addEventListener('install', function (event) { event.waitUntil(updateCache()); });

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var staticCacheName = 'static';
var version = 1;
 
function updateCache() {
    return caches.open(staticCacheName + version)
        .then(function (cache) {
            return cache.addAll([
                '/offline-page.html',
                '/assets/css/main.css',
                '/assets/js/main.js'
            ]);
        });
};
 
self.addEventListener('install', function (event) {
    event.waitUntil(updateCache());
});

当安装完毕后,service worker 能够监听和决定 fetch 事件,让大家得以完全调整之后网址中发出的全部互联网央浼。

JavaScript

self.addEventListener('fetch', function (event) { event.respondWith(fetch(event.request)); });

1
2
3
self.addEventListener('fetch', function (event) {
    event.respondWith(fetch(event.request));
});

在这里我们有很灵敏的空中能够公布,例如下边那么些节骨眼,可以通过代码来生成大家同生共死的呼吁响应:

JavaScript

self.addEventListener('fetch', function (event) { var response = new Response('<h1>Hello, World!</h1>', { headers: { 'Content-Type': 'text/html' } }); event.respondWith(response); });

1
2
3
4
5
self.addEventListener('fetch', function (event) {
    var response = new Response('&lt;h1&gt;Hello, World!&lt;/h1&gt;',
        { headers: { 'Content-Type': 'text/html' } });
    event.respondWith(response);
});

再有那一个,要是在缓存中找到了诉求相应的缓存,大家能够直接从缓存中回到它,若是没找到的话,再通过网络得到响应内容:

JavaScript

self.addEventListener('fetch', function (event) { event.respondWith( caches.match(event.request) .then(function (response) { return response || fetch(event.request); }) ); });

1
2
3
4
5
6
7
8
self.addEventListener('fetch', function (event) {
    event.respondWith(
        caches.match(event.request)
            .then(function (response) {
                return response || fetch(event.request);
            })
    );
});

这正是说大家怎么行使那一个职能来提供离线体验呢?

先是,在 service worker 安装进度中,我们要求把离线页面要求的 HTML 和财富文件通过 service worker 缓存下来。在缓存中,大家加载了协和开垦的 填字游戏 的 React应用 页面。之后,大家会堵住全数访问theguardian.com 网络须求,包含网页、以及页面中的财富文件。管理这么些须要的逻辑大约如下:

  1. 当大家检查实验到传播央求是指向大家的 HTML 页面时,大家总是会想要提供最新的内容,所以大家会尝试把那些诉求通过互联网发送给服务器。
    1. 当大家从服务器得到了响应,就能够直接回到这些响应。
    2. 如若网络央求抛出了充足(举例因为顾客掉线了),大家捕获这么些那么些,然后选取缓存的离线 HTML 页面作为响应内容。
  2. 不然,当大家检查评定到需要的不是 HTML 的话,大家会从缓存中找寻响应的须求内容。
    1. 若是找到了缓存内容,我们得以一贯回到缓存的内容。
    2. 不然,大家会尝试把那个诉求通过互连网发送给服务器。

在代码中,大家选用了 新的缓存 API(它是 Service Worker API 的一片段)以及 fetch 作用(用于转移互连网伏乞),如下所示:

JavaScript

var doesRequestAcceptHtml = function (request) { return request.headers.get('Accept') .split(',') .some(function (type) { return type === 'text/html'; }); }; self.addEventListener('fetch', function (event) { var request = event.request; if (doesRequestAcceptHtml(request)) { // HTML pages fallback to offline page event.respondWith( fetch(request) .catch(function () { return caches.match('/offline-page.html'); }) ); } else { // Default fetch behaviour // Cache first for all other requests event.respondWith( caches.match(request) .then(function (response) { return response || fetch(request); }) ); } });

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var doesRequestAcceptHtml = function (request) {
    return request.headers.get('Accept')
        .split(',')
        .some(function (type) { return type === 'text/html'; });
};
 
self.addEventListener('fetch', function (event) {
    var request = event.request;
    if (doesRequestAcceptHtml(request)) {
        // HTML pages fallback to offline page
        event.respondWith(
            fetch(request)
                .catch(function () {
                    return caches.match('/offline-page.html');
                })
        );
    } else {
        // Default fetch behaviour
        // Cache first for all other requests
        event.respondWith(
            caches.match(request)
                .then(function (response) {
                    return response || fetch(request);
                })
        );
    }
});

就只须求那样多!theguardian.com 上的 装有代码都以在 GitHub 上开源 的,所以你能够去那儿查看大家的 service worker 的总体版本,大概直接从生育碰着上访问 。

咱俩有足够的说辞为这一个新的浏览器技术欢呼喝彩,因为它能够用来让您的网址像后天的原生应用一样,具备完善的离线体验。今后当 theguardian.com 完全迁移到 HTTPS 之后,离线页面包车型地铁要紧性会显著加多,我们能够提供越发圆满的离线体验。虚构一下您在上下班路上互联网相当倒霉的时候访谈theguardian.com,你会看出特意为您订制的性情化内容,它们是在你在此以前访谈网站时由浏览器缓存下来的。它在安装进度中也不会产生另外艰巨,你所要求的只是探望那些网址而已,不像原生应用,还须求客商有两个使用市肆的账号本领设置。Serviceworker 同样能够协助我们升高网站的加载速度,因为网址的框架能够被保障地缓存下来,就好像原生应用一样。

设若您对 service worker 很感兴趣,想要精晓更加多内容的话,开辟者 马特Gaunt(Chrome的忠贞不二帮衬者)写了一篇越发详实地 介绍 Service Worker的文章。

打赏扶助笔者翻译越多好小说,谢谢!

打赏译者

张开阅读

除此以外,还会有多少个很棒的离线作用案例。如:Guardian 创设了三个全数 crossword puzzle(填字游戏)的离线 web 页面 – 由此,固然等待网络重连时(即已在离线状态下),也能找到一点野趣。小编也推荐看看 Google Chrome Github repo,它包括了过多差异的 Service Worker 案例 – 在这之中有个别选用案例也在那!

然则,假如你想跳过上述代码,只是想大约地通过多个库来拍卖相关操作,那么自个儿推荐您看看 UpUp。那是贰个轻量的剧本,能令你更自在地行使离线效用。

打赏帮忙作者翻译越来越多好小说,多谢!

打赏译者

Service Worker的生命周期

Service worker具有一个完全部独用立于Web页面包车型客车生命周期。

要让贰个service worker在你的网址上生效,你要求先在您的网页中注册它。注册三个service worker之后,浏览器会在后台默默运行一个service worker的安装进程。

在安装进度中,浏览器会加载并缓存一些静态能源。就算持有的公文被缓存成功,service worker就安装成功了。如若有别的公文加载或缓存战败,那么安装进度就能够战败,service worker就不可能被激活(也即未能安装成功)。即使发生如此的主题材料,别顾忌,它会在下一次再品尝安装。

当安装到位后,service worker的下一步是激活,在这一品级,你还足以荣升一个service worker的本子,具体内容大家会在后头讲到。

在激活之后,service worker将接管全部在大团结管辖域范围内的页面,不过借使二个页面是刚刚注册了service worker,那么它那二遍不会被接管,到下二回加载页面包车型客车时候,service worker才会生效。

当service worker接管了页面之后,它或然有二种景况:要么被终止以节外省部存款和储蓄器,要么会管理fetch和message事件,这八个事件分别发出于一个互连网央浼出现依然页面上发送了贰个消息。

下图是贰个简化了的service worker初次安装的生命周期:

图片 6

打赏帮忙小编翻译更加多好文章,感激!

图片 7

1 赞 收藏 评论

打赏协助本人翻译更多好小说,多谢!

任选一种支付格局

图片 8 图片 9

1 赞 3 收藏 1 评论

在咱们初阶写码在此之前

从这个花色地址拿到chaches polyfill。

这个polyfill支持CacheStorate.match,Cache.add和Cache.addAll,而现在Chrome M40实现的Cache API还从未帮助这几个措施。

将dist/serviceworker-cache-polyfill.js放到你的网址中,在service worker中经过importScripts加载进来。被service worker加载的本子文件会被自动缓存。

JavaScript

importScripts('serviceworker-cache-polyfill.js');

1
importScripts('serviceworker-cache-polyfill.js');

需要HTTPS

在开垦阶段,你能够由此localhost使用service worker,可是如若上线,就须要你的server扶助HTTPS。

你能够透过service worker要挟连接,伪造和过滤响应,非常逆天。纵然你能够约束本身不干坏事,也可能有人想干坏事。所感到了堤防旁人使坏,你只可以在HTTPS的网页上登记service workers,那样大家才方可防止加载service worker的时候不被人渣篡改。(因为service worker权限十分的大,所以要防卫它本人被歹徒篡改利用——译者注)

Github Pages恰巧是HTTPS的,所以它是一个杰出的纯天然实验田。

假使您想要令你的server协助HTTPS,你需求为您的server获得一个TLS证书。区别的server安装方法差别,阅读帮忙文书档案并通过Mozilla’s SSL config generator了然最棒施行。

至于笔者:Erucy

图片 10

业已的SharePoint喵星程序员(一时半刻还挂着微软MVP的名头),今后的Azure/.Net/MongoDB/Cordova/前端技术员,不常写随笔 个人主页 · 我的篇章 · 46 ·   

图片 11

关于小编:刘健超-J.c

图片 12

前端,在路上... 个人主页 · 小编的小说 · 19 ·     

图片 13

使用Service Worker

后天我们有了polyfill,况且解决了HTTPS,让大家看看见底怎么用service worker。

什么注册和安装service worker

要安装service worker,你必要在您的页面上注册它。那一个手续告诉浏览器你的service worker脚本在哪个地方。

JavaScript

if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw.js').then(function(registration) { // Registration was successful console.log('ServiceWorker registration successful with scope: ', registration.scope); }).catch(function(err) { // registration failed :( console.log('ServiceWorker registration failed: ', err); }); }

1
2
3
4
5
6
7
8
9
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/sw.js').then(function(registration) {
    // Registration was successful
    console.log('ServiceWorker registration successful with scope: ',    registration.scope);
  }).catch(function(err) {
    // registration failed :(
    console.log('ServiceWorker registration failed: ', err);
  });
}

地点的代码检查service worker API是或不是可用,假设可用,service worker /sw.js 被注册。

如果那个service worker已经被登记过,浏览器会自动忽略上边的代码。

有一个索要特地表明的是service worker文件的门道,你确定留心到了在那几个例子中,service worker文件被放在那一个域的根目录下,那象征service worker和网址同源。换句话说,那几个service work将会接到这些域下的具有fetch事件。若是自身将service worker文件注册为/example/sw.js,那么,service worker只能收到/example/路径下的fetch事件(例如: /example/page1/, /example/page2/)。

现行反革命你能够到 chrome://inspect/#service-workers 检查service worker是否对你的网站启用了。

图片 14

当service worker第一版被达成的时候,你也得以在chrome://serviceworker-internals中查看,它很有用,通过它可以最直观地熟悉service worker的生命周期,不过这个功能很快就会被移到chrome://inspect/#service-workers中。

您会意识那几个职能能够很有利地在三个效仿窗口中测量试验你的service worker,那样您能够关闭和重复展开它,而不会潜移暗化到您的新窗口。任何创造在模拟窗口中的注册服务和缓存在窗口被关门时都将未有。

Service Worker的设置步骤

在页面上做到注册手续之后,让我们把集中力转到service worker的剧本里来,在那中间,我们要成功它的装置步骤。

在最主旨的例证中,你须要为install事件定义多个callback,并决定如何文件你想要缓存。

JavaScript

// The files we want to cache var urlsToCache = [ '/', '/styles/main.css', '/script/main.js' ]; // Set the callback for the install step self.addEventListener('install', function(event) { // Perform install steps });

1
2
3
4
5
6
7
8
9
10
11
// The files we want to cache
var urlsToCache = [
  '/',
  '/styles/main.css',
  '/script/main.js'
];
 
// Set the callback for the install step
self.addEventListener('install', function(event) {
    // Perform install steps
});

在我们的install callback中,大家供给实施以下步骤:

  1. 展开二个缓存
  2. 缓存大家的文本
  3. 操纵是还是不是享有的财富是不是要被缓存

JavaScript

var CACHE_NAME = 'my-site-cache-v1'; var urlsToCache = [ '/', '/styles/main.css', '/script/main.js' ]; self.addEventListener('install', function(event) { // Perform install steps event.waitUntil( caches.open(CACHE_NAME) .then(function(cache) { console.log('Opened cache'); return cache.addAll(urlsToCache); }) ); });

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var CACHE_NAME = 'my-site-cache-v1';
var urlsToCache = [
  '/',
  '/styles/main.css',
  '/script/main.js'
];
 
self.addEventListener('install', function(event) {
  // Perform install steps
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(function(cache) {
        console.log('Opened cache');
        return cache.addAll(urlsToCache);
      })
  );
});

下面的代码中,我们经过caches.open展开大家钦命的cache文件名,然后大家调用cache.addAll并传播大家的文本数组。那是由此多元promise(caches.open 和 cache.addAll)实现的。event.waitUntil得到三个promise并使用它来获取安装开支的时间以及是还是不是安装成功。

借使具有的文件都被缓存成功了,那么service worker就设置成功了。倘若别的二个文书下载退步,那么安装步骤就能够失利。那一个点子允许你依赖于您和睦内定的具有财富,可是那意味着你供给特别审慎地调整怎么样文件须求在设置步骤中被缓存。钦点了太多的公文的话,就能够大增设置失利率。

上边只是三个简短的例证,你能够在install事件中推行别的操作还是乃至忽视install事件。

本文由杏彩发布,转载请注明来源

关键词: