如果你只想做一件事:先把91网页版的缓存管理做稳(别被误导)
如果你只想做一件事:先把91网页版的缓存管理做稳(别被误导)

一句话结论:在任何性能优化、功能迭代或用户增长之前,先把缓存策略稳住——把对静态资源、API、页面和客户端存储的边界与规则定好,能避免更多麻烦和反复修补。
为什么先做缓存管理?
- 立竿见影的用户体验改善:正确的缓存能大幅缩短首屏和交互延迟。
- 减少服务器压力和成本:CDN + 浏览器缓存能把重复请求挪到边缘层。
- 降低故障放大风险:不当缓存会把错误结果或旧数据广泛传播,排查和回滚代价高。
- 为后续功能(离线、渐进式增强、A/B)奠定可靠基础。
核心原则(简洁版)
- 区分“可长期缓存且不可变的资源”与“频繁变化或用户敏感数据”。
- 静态资源走长期缓存 + 指纹化;HTML/API走短TTL或网络优先策略。
- 使用明确的HTTP缓存头(Cache-Control、ETag/Last-Modified)并在CDN层配合缓存策略。
- 对敏感或有权限限制的数据禁止公共缓存(no-store/no-cache/Authorization控制)。
- 设计可控的失效与回滚机制(软清除、标记/版本化、按标签清理)。
具体实践(按资源类型)
1) 静态资源(JS/CSS/图片/字体)
- 上线策略:构建产物做文件指纹(hash),URL 带版本:/static/app.abc123.js。
- HTTP 头:Cache-Control: public, max-age=31536000, immutable。
- CDN:把这些文件在边缘缓存为主;当文件名变更时自动获得新版本。
- 小心第三方资源,尽量自托管关键文件或有回退方案。
2) HTML 页面(入口页面、SSR 渲染)
- 不可把主 HTML 设置为长期缓存(用户会拿到旧入口),采用短 TTL 或 network-first。
- 可在边缘采用 stale-while-revalidate:Cache-Control: public, max-age=60, stale-while-revalidate=300。这样保证响应快速且后台悄悄刷新。
- 对需要实时性的页面(用户面板、交易)走 no-cache 或短缓存并使用条件请求。
3) API 响应
- 按接口性质分类:幂等且不常变(列表页缓存)、用户专属或敏感(不缓存)、可容忍短时陈旧(短TTL或SWR)。
- 常用头:ETag + If-None-Match 做条件请求,减少带宽。Cache-Control: private, max-age=30 对用户专属响应可用。
- 在服务端加上缓存键策略(URL + query + Authorization?)并避免把 Authorization 当成缓存键唯一来源(更安全地标记为 private)。
- 使用 CDN 的边缘缓存只对公开且安全的接口开放。
4) 客户端存储(localStorage、IndexedDB、service worker)
- localStorage:适合用户偏好、非敏感的小数据。避免当作主数据同步源。
- IndexedDB:适合离线缓存复杂数据,配合版本控制和迁移脚本。
- Service Worker:实现离线与策略化缓存(cache-first for assets, network-first for APIs)。测试边界情况(更新 SW 时的缓存清理、并发请求处理)。
- 切忌把敏感凭证放入可被脚本读取的长期存储。
缓存失效策略(实用套路)
- 指纹化(immutable)+ 长缓存:用于版本化静态文件。
- 短TTL + stale-while-revalidate:用于 HTML/公共数据,平衡一致性与性能。
- 条件请求(ETag/Last-Modified):节省带宽并保持新鲜度。
- 软清除 + 强清除:先发送标记令边缘“立即返回旧缓存但后台刷新”,必要时通过 CDN API 执行实时清除。
- 标签化/分组清除:对复杂系统按功能线打标签清除更灵活(例如:product-list 标签在商品上新时触发)。
常见误区(以及怎么避免)
- 误区:把所有东西都“缓存住”来追求性能。后果:数据不同步、用户混乱、隐私泄露。
避免方法:按敏感度和变更频率分层决策。 - 误区:只依赖浏览器默认缓存行为。后果:不同浏览器/代理表现不一致。
避免方法:明确缓存头,控制 CDN 与应用层规则。 - 误区:用 localStorage 作为离线主数据源且不做版本迁移。后果:数据格式碎片化、升级困难。
避免方法:IndexedDB + 版本/迁移策略。 - 误区:在更新时只靠客户端垃圾回收。后果:旧资源长期占用缓存且用户继续加载旧版本。
避免方法:构建版本化 URL 并在部署脚本中触发 CDN 清理或软更新提示。
监控与回滚
- 必需监控项:缓存命中率、边缘与源的流量对比、首字节时间(TTFB)、错误率、用户看到的版本比率。
- 回滚策略:发布时保留旧版本的CDN路由或支持快速切回旧包,且在发布前做好“软发布+灰度检验”。
- 自动化:在 CI/CD 中把缓存清理、指纹上传、回写 CDN 缓存状态纳入发布步骤。
简单示例(HTTP 头)
- 静态资源:Cache-Control: public, max-age=31536000, immutable
- HTML 页面:Cache-Control: public, max-age=60, stale-while-revalidate=300
- 用户接口:Cache-Control: private, max-age=30
- 敏感接口:Cache-Control: no-store
结语(可执行的第一步) 把当前系统的缓存面貌画一遍:列出所有静态文件、页面、API、客户端存储点,标注现有的缓存策略和TTL。找出“长期可缓存但未指纹化的静态资源”、和“被缓存但不应缓存的私有API”。从修复这两类问题开始,你会发现后续的性能优化和功能迭代都顺了很多路。
上一篇
下一篇

















