Skip to content

Commit 6d12b36

Browse files
committed
新版本发布自动清理缓存
1 parent 6cb40ad commit 6d12b36

File tree

5 files changed

+444
-23
lines changed

5 files changed

+444
-23
lines changed
Lines changed: 370 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,370 @@
1+
# 版本更新指南
2+
3+
## 自动缓存清理机制
4+
5+
当发布新版本时,Service Worker 会自动清理旧缓存并提示用户更新。
6+
7+
## 工作流程
8+
9+
```mermaid
10+
sequenceDiagram
11+
participant User as 用户
12+
participant Page as 页面
13+
participant SW as Service Worker
14+
participant Cache as 缓存
15+
16+
User->>Page: 访问网站
17+
Page->>SW: 检查更新
18+
SW->>SW: 发现新版本
19+
SW->>Cache: 删除旧缓存
20+
SW->>Page: 发送更新消息
21+
Page->>User: 显示"正在更新..."
22+
SW->>SW: 激活新版本
23+
Page->>Page: 自动刷新
24+
User->>Page: 看到最新版本
25+
```
26+
27+
## 更新步骤
28+
29+
### 1. 修改版本号
30+
31+
**更新 Service Worker 版本**
32+
```javascript
33+
// public/sw.js
34+
const CACHE_NAME = 'weiz-nav-v4'; // v3 → v4
35+
const RUNTIME_CACHE = 'weiz-nav-runtime-v4';
36+
const IMAGE_CACHE = 'weiz-nav-images-v4';
37+
```
38+
39+
**更新版本信息**
40+
```json
41+
// public/version.json
42+
{
43+
"version": "1.0.4",
44+
"buildTime": "2024-11-18T12:00:00.000Z",
45+
"cacheVersion": "v4",
46+
"changelog": [
47+
"新功能描述",
48+
"Bug 修复",
49+
"性能优化"
50+
]
51+
}
52+
```
53+
54+
### 2. 提交和部署
55+
56+
```bash
57+
# 提交更改
58+
git add public/sw.js public/version.json
59+
git commit -m "chore: 发布 v1.0.4"
60+
git push
61+
62+
# Cloudflare Pages 自动部署
63+
```
64+
65+
### 3. 用户体验
66+
67+
**用户访问网站时**
68+
1. Service Worker 检测到新版本
69+
2. 后台下载新的 Service Worker
70+
3. 显示提示:"发现新版本,正在更新..."
71+
4. 自动删除旧缓存
72+
5. 激活新版本
73+
6. 自动刷新页面
74+
7. 显示:"应用已更新到最新版本!"
75+
76+
**整个过程约 2-3 秒,用户几乎无感知**
77+
78+
## 缓存清理策略
79+
80+
### 自动清理
81+
82+
Service Worker 激活时会自动清理:
83+
```javascript
84+
// 保留当前版本的缓存
85+
const keepCaches = [CACHE_NAME, RUNTIME_CACHE, IMAGE_CACHE];
86+
87+
// 删除所有其他缓存
88+
caches.keys().then((cacheNames) => {
89+
cacheNames.forEach((cacheName) => {
90+
if (!keepCaches.includes(cacheName)) {
91+
caches.delete(cacheName); // 删除旧缓存
92+
}
93+
});
94+
});
95+
```
96+
97+
### 清理的内容
98+
99+
1. **旧版本的静态资源缓存**
100+
2. **旧版本的运行时缓存**
101+
3. **旧版本的图片缓存**
102+
103+
### 保留的内容
104+
105+
1. **LocalStorage 数据**(用户的导航链接)
106+
2. **用户设置**(主题、搜索引擎等)
107+
3. **当前版本的缓存**
108+
109+
## 版本检查机制
110+
111+
### 定期检查
112+
113+
```javascript
114+
// 每小时检查一次更新
115+
setInterval(() => {
116+
registration.update();
117+
}, 60 * 60 * 1000);
118+
```
119+
120+
### 手动检查
121+
122+
用户可以通过以下方式手动检查更新:
123+
1. 刷新页面(F5)
124+
2. 硬刷新(Ctrl+Shift+R)
125+
3. 清除缓存后刷新
126+
127+
## 版本回滚
128+
129+
如果新版本有问题,可以快速回滚:
130+
131+
### 1. 回滚代码
132+
133+
```bash
134+
# 回滚到上一个版本
135+
git revert HEAD
136+
git push
137+
```
138+
139+
### 2. 用户端清理
140+
141+
用户需要:
142+
1. 清除浏览器缓存
143+
2. 刷新页面
144+
3. 或等待 Service Worker 自动更新
145+
146+
## 测试更新流程
147+
148+
### 本地测试
149+
150+
```bash
151+
# 1. 构建当前版本
152+
pnpm build
153+
pnpm serve:static
154+
155+
# 2. 访问 http://localhost:3000
156+
# 3. 打开 DevTools → Application → Service Workers
157+
158+
# 4. 修改版本号(v3 → v4)
159+
# 5. 重新构建
160+
pnpm build
161+
162+
# 6. 刷新页面
163+
# 7. 观察 Service Worker 更新过程
164+
```
165+
166+
### 生产测试
167+
168+
```bash
169+
# 1. 部署到测试环境
170+
git push origin test
171+
172+
# 2. 访问测试网站
173+
# 3. 观察更新提示
174+
# 4. 确认缓存已清理
175+
# 5. 验证功能正常
176+
177+
# 6. 部署到生产环境
178+
git push origin main
179+
```
180+
181+
## 监控更新状态
182+
183+
### 浏览器控制台
184+
185+
```javascript
186+
// 查看当前 Service Worker 版本
187+
navigator.serviceWorker.getRegistration().then((reg) => {
188+
console.log('当前版本:', reg.active?.scriptURL);
189+
});
190+
191+
// 查看所有缓存
192+
caches.keys().then((keys) => {
193+
console.log('缓存列表:', keys);
194+
});
195+
196+
// 查看缓存大小
197+
navigator.storage.estimate().then((estimate) => {
198+
console.log('已使用:', estimate.usage, 'bytes');
199+
console.log('配额:', estimate.quota, 'bytes');
200+
});
201+
```
202+
203+
### Service Worker 状态
204+
205+
```
206+
DevTools → Application → Service Workers
207+
208+
状态说明:
209+
- installing: 正在安装
210+
- installed: 已安装,等待激活
211+
- activating: 正在激活
212+
- activated: 已激活,正在运行
213+
- redundant: 已废弃
214+
```
215+
216+
## 常见问题
217+
218+
### Q: 用户会丢失数据吗?
219+
220+
**A**: 不会!
221+
- LocalStorage 数据不会被清理
222+
- 只清理缓存的静态资源
223+
- 用户的导航链接、设置都会保留
224+
225+
### Q: 更新需要多长时间?
226+
227+
**A**: 通常 2-3 秒
228+
- 下载新 Service Worker: ~1 秒
229+
- 清理旧缓存: ~0.5 秒
230+
- 刷新页面: ~0.5 秒
231+
232+
### Q: 用户必须刷新页面吗?
233+
234+
**A**: 会自动刷新
235+
- Service Worker 激活后自动刷新
236+
- 用户无需手动操作
237+
- 显示友好的更新提示
238+
239+
### Q: 如果用户不在线怎么办?
240+
241+
**A**: 下次在线时更新
242+
- Service Worker 会在后台等待
243+
- 用户下次访问时检查更新
244+
- 离线期间使用旧版本
245+
246+
### Q: 可以强制用户更新吗?
247+
248+
**A**: 可以,但不推荐
249+
```javascript
250+
// 强制刷新(不推荐)
251+
if (newWorker.state === 'installed') {
252+
newWorker.postMessage({ type: 'SKIP_WAITING' });
253+
window.location.reload(); // 立即刷新
254+
}
255+
```
256+
257+
推荐使用当前的友好提示方式。
258+
259+
## 版本命名规范
260+
261+
### 语义化版本
262+
263+
```
264+
v主版本.次版本.修订版本
265+
266+
例如:v1.2.3
267+
- 主版本:重大更新,可能不兼容
268+
- 次版本:新功能,向后兼容
269+
- 修订版本:Bug 修复,向后兼容
270+
```
271+
272+
### 缓存版本
273+
274+
```
275+
weiz-nav-v{number}
276+
277+
例如:weiz-nav-v3
278+
- 每次更新递增
279+
- 简单明了
280+
- 易于识别
281+
```
282+
283+
## 最佳实践
284+
285+
### 1. 版本号管理
286+
287+
- ✅ 使用语义化版本
288+
- ✅ 在 version.json 中记录
289+
- ✅ 在 CHANGELOG.md 中记录
290+
- ✅ Git tag 标记版本
291+
292+
### 2. 测试流程
293+
294+
- ✅ 本地测试更新流程
295+
- ✅ 测试环境验证
296+
- ✅ 生产环境灰度发布
297+
- ✅ 监控错误日志
298+
299+
### 3. 用户体验
300+
301+
- ✅ 友好的更新提示
302+
- ✅ 自动刷新页面
303+
- ✅ 保留用户数据
304+
- ✅ 快速更新过程
305+
306+
### 4. 回滚准备
307+
308+
- ✅ 保留上一个版本的代码
309+
- ✅ 准备回滚脚本
310+
- ✅ 监控用户反馈
311+
- ✅ 快速响应问题
312+
313+
## 更新检查清单
314+
315+
发布新版本前,确认:
316+
317+
- [ ] 更新 Service Worker 版本号
318+
- [ ] 更新 version.json
319+
- [ ] 更新 CHANGELOG.md
320+
- [ ] 本地测试更新流程
321+
- [ ] 测试环境验证
322+
- [ ] 代码审查通过
323+
- [ ] 准备回滚方案
324+
- [ ] 通知用户(如果是重大更新)
325+
326+
## 示例:发布 v1.0.4
327+
328+
```bash
329+
# 1. 更新版本号
330+
# 编辑 public/sw.js
331+
const CACHE_NAME = 'weiz-nav-v4';
332+
333+
# 编辑 public/version.json
334+
{
335+
"version": "1.0.4",
336+
"cacheVersion": "v4"
337+
}
338+
339+
# 2. 提交
340+
git add .
341+
git commit -m "chore: 发布 v1.0.4
342+
343+
- 新增功能 A
344+
- 修复 Bug B
345+
- 优化性能 C"
346+
347+
# 3. 打标签
348+
git tag v1.0.4
349+
git push origin v1.0.4
350+
351+
# 4. 部署
352+
git push origin main
353+
354+
# 5. 监控
355+
# 查看 Cloudflare Pages 部署日志
356+
# 监控用户反馈
357+
# 检查错误日志
358+
```
359+
360+
## 总结
361+
362+
✅ **自动化**:版本更新完全自动化
363+
✅ **无感知**:用户几乎无感知更新
364+
✅ **安全**:保留用户数据
365+
✅ **快速**:2-3 秒完成更新
366+
✅ **可靠**:自动清理旧缓存
367+
368+
---
369+
370+
**享受无缝的版本更新体验!** 🚀

0 commit comments

Comments
 (0)