
提到网站访问速度,很大一部分原因要归功于 VOID 主题作者在这款主题中运用 PJAX 无刷新访问技术、Lazyload 图片懒加载以及 Service Workers 浏览器缓存,这些技术的加持大大提升了网站的访问体验。

在了解关于 Service Worker 的实现方式后,这里就大概的介绍一下如何在自己的博客 / 网站中启用 Service Worker 这项技术来达到减少服务器请求的负担压力。( Service Worker 并非专门为缓存而设计,它还可以解决 Web 应用推送、后台长计算等问题 )
教程
Service Workers 要求必须在 HTTPS 下才能运行,这是大前提。
1、下载保存 sw-toolbox.js 文件到主题目录下(静态文件存放的目录),例如 assets 目录之下。
2、创建缓存规则,保存为 serviceworker.js 并存放到网站根目录。
1'use strict';
2
3(function () {
4 'use strict';
5 /**
6 * Service Worker Toolbox caching
7 */
8
9 var cacheVersion = '-toolbox-v1';
10 var dynamicVendorCacheName = 'dynamic-vendor' + cacheVersion;
11 var staticVendorCacheName = 'static-vendor' + cacheVersion;
12 var staticAssetsCacheName = 'static-assets' + cacheVersion;
13 var contentCacheName = 'content' + cacheVersion;
14 var maxEntries = 200;
15
16
17 self.importScripts('usr/themes/VOID/assets/sw-toolbox.js');
18
19 self.toolbox.options.debug = false;
20
21 // 缓存本站静态文件
22 self.toolbox.router.get('/usr/(.*)', self.toolbox.cacheFirst, {
23 cache: {
24 name: staticAssetsCacheName,
25 maxEntries: maxEntries
26 }
27 });
28
29 // 缓存 Gravatar 头像
30 self.toolbox.router.get('/avatar/(.*)', self.toolbox.cacheFirst, {
31 origin: /(secure\.gravatar\.com)/,
32 cache: {
33 name: staticVendorCacheName,
34 maxEntries: maxEntries
35 }
36 });
37
38 // 缓存 Google 字体
39 self.toolbox.router.get('/(.*)', self.toolbox.cacheFirst, {
40 origin: /(fonts\.googleapis\.com)/,
41 cache: {
42 name: staticVendorCacheName,
43 maxEntries: maxEntries
44 }
45 });
46 self.toolbox.router.get('/(.*)', self.toolbox.cacheFirst, {
47 origin: /(fonts\.gstatic\.com)/,
48 cache: {
49 name: staticVendorCacheName,
50 maxEntries: maxEntries
51 }
52 });
53
54 // immediately activate this serviceworker
55 self.addEventListener('install', function (event) {
56 return event.waitUntil(self.skipWaiting());
57 });
58
59 self.addEventListener('activate', function (event) {
60 return event.waitUntil(self.clients.claim());
61 });
62
63})();
这里需要说明的是:1、Service Worker 不适用于缓存头为 Cache-control: no-store 或者 no-cache 的文件;2、 typecho 涉及到的主题及插件都集中存放在 usr 目录,因此上面的缓存规则针对 usr 目录下的所有文件。大家可以依据自己情况调整。
3、在主题的 footer.php 文件闭合标签

