1. HTTP 缓存(强缓存/协商缓存)与代码分割文件名的 hash 策略
HTTP 强缓存与协商缓存的机制是什么?与代码分割文件名的 hash 策略如何配合?
- 强缓存(Cache-Control、Expires)与协商缓存(Last-Modified/ETag)的流程
- contenthash 文件名与 immutable 缓存的配合原理
- HTML 与静态资源的差异化缓存策略
强缓存指浏览器在过期时间内不发起请求直接使用本地副本(Cache-Control: max-age、immutable 等),协商缓存指缓存过期后携带 ETag/Last-Modified 向服务器验证,304 则复用本地(响应头 Last-Modified/ETag)。对前端静态资源,最有效的组合是"内容哈希文件名 + 永久强缓存":文件名含 contenthash,内容不变文件名不变,浏览器/CDN 可长期缓存(max-age=31536000, immutable);内容变化文件名变化,请求新文件,无需协商。
代码分割文件名 hash 策略要点:业务 chunk 与 vendor chunk 分开哈希(vendor 更新频率低,单独长缓存);hash 基于模块内容计算,避免"文件未变但 hash 变"导致缓存失效(如 webpack 的 contenthash 与 moduleIds 稳定性配置);HTML 是入口文件,不能长缓存(用 no-cache 协商或短缓存),因为其引用的文件名会随构建变化。整体策略即"入口短缓存、资源长缓存、变化靠文件名区分",配合 CDN 的缓存头与版本目录管理,实现发布即生效且缓存命中率最大化。
本题考察缓存体系的经典组合:机制(强/协商)是基础,hash 文件名是前端特有解法。回答应讲清两类缓存流程、hash 与 immutable 的配合原理、以及 HTML 入口的特殊处理,体现完整的缓存策略设计。