Skip to content

Commit a51ff74

Browse files
committed
feat: service-worker
1 parent 1c037aa commit a51ff74

File tree

7 files changed

+745
-4
lines changed

7 files changed

+745
-4
lines changed

README.md

+9
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,15 @@
4040
<td><a href="https://juejin.cn/post/7265515986471600143">从零实现的Chrome扩展</a></td>
4141
</tr>
4242

43+
<tr>
44+
<td><a href="https://juejin.cn/post/7357390581301739531">基于React的虚拟滚动方案</a></td>
45+
<td>
46+
<a href="./packages/virtual-list-fixed-scroll">packages/virtual-list-fixed-scroll</a><br>
47+
<a href="./packages/virtual-list-placeholder">packages/virtual-list-placeholder</a><br>
48+
<a href="./packages/virtual-list-virtualization">packages/virtual-list-virtualization</a><br>
49+
<a href="./packages/virtual-list-dynamic-scroll">packages/virtual-list-dynamic-scroll</a>
50+
</td>
51+
</tr>
4352

4453
</tbody>
4554
</table>

packages/service-worker/index.html

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8">
5+
<title>Service Worker</title>
6+
<style type="text/css">
7+
.avatar{
8+
width: 50px;
9+
height: 50px;
10+
border-radius: 50px;
11+
}
12+
</style>
13+
</head>
14+
<body>
15+
<img class="avatar" src="./static/avatar.png">
16+
<script type="text/javascript">
17+
navigator.serviceWorker
18+
.register("sw.js")
19+
.then(() => {
20+
console.info("注册成功");
21+
})
22+
.catch(() => {
23+
console.error("注册失败");
24+
});
25+
</script>
26+
<script src="./static/cache.js"></script>
27+
</body>
28+
</html>

packages/service-worker/package.json

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"name": "service-worker",
3+
"version": "1.0.0",
4+
"scripts": {
5+
"dev": "anywhere -h localhost -p 7890",
6+
"dev-python": "python3 -m http.server 9000 --bind 127.0.0.1"
7+
},
8+
"devDependencies": {
9+
"anywhere": "1.6.0"
10+
}
11+
}
111 KB
Loading
+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
console.log("cache.js loaded");

packages/service-worker/sw.js

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
const CACHE_NAME = "service-worker-demo";
2+
const urlsToCache = ["/", "/static/avatar.png", "/static/cache.js"];
3+
4+
this.addEventListener("install", event => {
5+
event.waitUntil(
6+
caches.open(CACHE_NAME).then(cache => {
7+
console.log("[Service Worker]", urlsToCache);
8+
return cache.addAll(urlsToCache);
9+
})
10+
);
11+
});
12+
13+
this.addEventListener("activate", event => {
14+
// 不在白名单的`CACHE_NAME`就清理
15+
const cacheWhitelist = ["service-worker-demo"];
16+
event.waitUntil(
17+
caches.keys().then(cacheNames => {
18+
return Promise.all(
19+
cacheNames.map(cacheName => {
20+
if (cacheWhitelist.indexOf(cacheName) === -1) {
21+
return caches.delete(cacheName);
22+
}
23+
})
24+
);
25+
})
26+
);
27+
// 查看一下缓存
28+
event.waitUntil(
29+
caches.open(CACHE_NAME).then(cache => cache.keys().then(res => console.log(res)))
30+
);
31+
});
32+
33+
this.addEventListener("fetch", event => {
34+
const url = new URL(event.request.url);
35+
if (url.origin === location.origin && urlsToCache.indexOf(url.pathname) > -1) {
36+
event.respondWith(
37+
caches.match(event.request).then(resp => {
38+
if (resp) {
39+
console.log("fetch ", event.request.url, "有缓存,从缓存中取");
40+
return resp;
41+
} else {
42+
console.log("fetch ", event.request.url, "没有缓存,网络获取");
43+
return fetch(event.request);
44+
// // 如果有需要的话我们不需要在事件响应时进行匹配 可以直接将所有发起过的请求缓存
45+
// return fetch(event.request).then(response => {
46+
// return caches.open(CACHE_NAME).then(cache => {
47+
// cache.put(event.request, response.clone());
48+
// return response;
49+
// });
50+
// });
51+
}
52+
})
53+
);
54+
}
55+
});

0 commit comments

Comments
 (0)