请结合前端工程实践,阐述项目中静态资源缓存配置的主要策略有哪些?
考察说明
考查对前端静态资源缓存原理、配置方式及更新策略的理解。
回答思路
- 【回答框架 1】强缓存通过HTTP头Cache-Control的max-age或Expires实现,浏览器直接读取本地缓存,不再请求服务器;协商缓存则通过Last-Modified/If-Modified-Since或ETag/If-None-Match,每次请求带校验字段,由服务器判断是否返回304。
- 【回答框架 2】配置策略上,对文件名带hash(如webpack的contenthash)的静态资源,可设置较长的max-age(如一年),利用强缓存避免重复下载;对HTML入口文件,设置no-cache或较短的max-age,确保每次获取最新版本;对不常变更的第三方库,可单独设置长期缓存。
- 【回答框架 3】更新策略要避免版本更新后用户拿到旧缓存,常见的做法是文件名中嵌入内容hash,文件内容变化时hash变化,URL随之改变,从而强制浏览器请求新资源;同时搭配服务端配置,如Nginx中按文件类型或路径设置Cache-Control头,以及使用CDN时配置回源缓存策略。
- 【回答框架 4】开发环境下应禁用强缓存或使用no-cache,保证代码改动即时生效;生产环境还要考虑缓存与接口服务器的并发问题,如使用缓存头或版本号管理。
- 【回答框架 5】还应考虑浏览器缓存策略与业务场景结合,例如登录状态、敏感信息等不应使用强缓存,需设置no-store;对于图片、样式等资源,可设置合理的过期时间,并在资源更新时通过版本号或hash主动刷新。
- 【关键点 1】强缓存优先使用Cache-Control,协商缓存依赖ETag或Last-Modified。
- 【关键点 2】带hash的文件名配合长缓存是主流实践。
- 【关键点 3】HTML入口文件设置no-cache以保证更新可见。
- 【关键点 4】缓存策略需区分开发与生产环境。
- 【关键点 5】敏感数据禁用缓存,使用no-store。
- 【易错点 1】强缓存设置过久可能导致页面更新后无法及时响应,故需配合hash或版本控制。
- 【易错点 2】协商缓存虽能校验,但每次请求仍会建立连接,性能低于强缓存。
- 【易错点 3】不当地配置CDN缓存可能导致源站更新后CDN节点仍返回旧内容,需注意回源策略。