-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsw.js
152 lines (140 loc) · 4.81 KB
/
sw.js
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
const workboxVersion = '6.5.4';
importScripts(`https://storage.googleapis.com/workbox-cdn/releases/${workboxVersion}/workbox-sw.js`);
workbox.core.setCacheNameDetails({
prefix: "Guo Le's Blog"
});
self.skipWaiting();
workbox.core.clientsClaim();
// 注册成功后要立即缓存的资源列表
// 具体缓存列表在gulpfile.js中配置,见下文
workbox.precaching.precacheAndRoute([{"revision":"81be450cc5b28b2ff99256dfd9d6a755","url":"./404.html"},{"revision":"664d9bf35621dc888f6a0f1231113f34","url":"./index.html"},{"revision":"f93d9674fa0a266eefc65e92b21778be","url":"./js/main.js"}], {
directoryIndex: null
});
// 清空过期缓存
workbox.precaching.cleanupOutdatedCaches();
// workbox.strategies.CacheFirst 缓存优先
// workbox.strategies.NetworkFirst 网络优先
// workbox.strategies.NetworkOnly:仅使用正常的网络请求
// workbox.strategies.CacheOnly:仅使用缓存中的资源
// workbox.strategies.StaleWhileRevalidate:从缓存中读取资源的同时发送网络请求更新本地缓存
// 图片资源(可选,不需要就注释掉)
workbox.routing.registerRoute(
/\.(?:png|jpg|jpeg|gif|bmp|webp|svg|ico)$/,
new workbox.strategies.CacheFirst({
cacheName: "images",
plugins: [
new workbox.expiration.ExpirationPlugin({
maxEntries: 1000,
maxAgeSeconds: 60 * 60 * 24 * 30 // 30day
}),
new workbox.cacheableResponse.CacheableResponsePlugin({
statuses: [0, 200]
})
]
})
);
// 缓存 js / css / json 资源
workbox.routing.registerRoute(
({ url }) => {
if (url.href.includes('.css') || url.href.includes('.js')) {
return url.href.match(/\/?(\.css|\.js|\.jp?eg|\.png)/) && !['Blog_init.js', 'Blog_utils.js', 'color.css', 'Blog.css'].includes(url.href.match(/\/?(\.css|\.js)/)[0]);
} else {
return url.href.match(/\/?(\.css|\.js|\.jp?eg|\.png)/);
}
},
new workbox.strategies.CacheFirst({
cacheName: "static-libs",
plugins: [
new workbox.expiration.ExpirationPlugin({
maxEntries: 1000,
maxAgeSeconds: 60 * 60 * 24 * 30 //30day
}),
new workbox.cacheableResponse.CacheableResponsePlugin({
statuses: [0, 200]
})
]
})
);
workbox.routing.registerRoute(
({ url }) => {
const match = url.href.match(/\/?(\.css|\.js)/);
return match && ['Blog_init.js', 'Blog_utils', 'color.css', 'Blog.css'].includes(match[0]);
},
new workbox.strategies.StaleWhileRevalidate({
cacheName: "custom-assets-cache",
plugins: [
new workbox.expiration.ExpirationPlugin({
maxEntries: 1000,
maxAgeSeconds: 60 * 60 * 24 * 7 //7day
}),
new workbox.cacheableResponse.CacheableResponsePlugin({
statuses: [0, 200]
})
]
})
);
// 字体文件(可选,不需要就注释掉)
workbox.routing.registerRoute(
/\.(?:eot|ttf|woff|woff2)$/,
new workbox.strategies.CacheFirst({
cacheName: "fonts",
plugins: [
new workbox.expiration.ExpirationPlugin({
maxEntries: 1000,
maxAgeSeconds: 60 * 60 * 24 * 30
}),
new workbox.cacheableResponse.CacheableResponsePlugin({
statuses: [0, 200]
})
]
})
);
// 谷歌字体(可选,不需要就注释掉)
// workbox.routing.registerRoute(
// /^https:\/\/fonts\.googleapis\.com/,
// new workbox.strategies.StaleWhileRevalidate({
// cacheName: "google-fonts-stylesheets"
// })
// );
// workbox.routing.registerRoute(
// /^https:\/\/fonts\.gstatic\.com/,
// new workbox.strategies.CacheFirst({
// cacheName: 'google-fonts-webfonts',
// plugins: [
// new workbox.expiration.ExpirationPlugin({
// maxEntries: 1000,
// maxAgeSeconds: 60 * 60 * 24 * 30
// }),
// new workbox.cacheableResponse.CacheableResponsePlugin({
// statuses: [0, 200]
// })
// ]
// })
// );
workbox.routing.registerRoute(
({ url }) => {
return (
(url.href.match(/^https?:\/\/cdn\.guole\.fun/) ||
url.href.match(/^https?:\/\/jsd\.guole\.fun/) ||
url.href.match(/^https?:\/\/cdnjs\.guole\.fun/) ||
url.href.match(/^https?:\/\/umami\.guole\.fun\/script\.js/) ||
url.href.match(/^https?:\/\/umami\.guole\.fun\/images\//) ||
url.href.match(/^https?:\/\/twikoo-magic\.oss-cn-hangzhou\.aliyuncs\.com/)) &&
!url.href.includes('https://cdn.guole.fun/json/') &&
!url.href.includes('https://cdn.guole.fun/media/') &&
!url.href.includes('https://cdn.guole.fun/mp3/')
)
},
new workbox.strategies.CacheFirst({
cacheName: "cdn",
plugins: [
new workbox.expiration.ExpirationPlugin({
maxEntries: 1000,
maxAgeSeconds: 60 * 60 * 24 * 30 //30day
}),
new workbox.cacheableResponse.CacheableResponsePlugin({
statuses: [0, 200]
})
]
})
);