老师你好,有个面试题想请教

来源:10-26 webpack面试真题-前端代码为何要打包

Darkholme

2021-05-08

原题目是这样的,面试官问前端性能优化你都做过哪些?完了说着说着我就说到webpack打包这里了,然后提到了webpack打包后产生的文件唯一标识contentHash会命中浏览器的协商缓存,减少http请求。面试官就问我这个哈希值为什么会命中协商缓存?我就答浏览器会检查是否携带Etag这个Header,Etag可以是一个文件的唯一标识,而webpack打包后产生的哈希值就对应了这个标识,所以会命中协商缓存(基本上就围绕协商缓存那一套在说)。但是面试官貌似不太满意。我该怎么答呢,或者说我是不是对于webpack打包和缓存的关系理解有误?

写回答

2回答

双越

2021-05-08

contentHash 并不是协商缓存,而是强缓存,nginx 会设置如:

Cache-Control: max-age=31536000


只要 js (或者 css img 等静态文件)文件内容发生变化,contentHash 肯定会变,而且 html 内的 js 地址也会随着变。所以,每次生成的 js 都用强缓存即可。



1
5
wibc666
回复
嵇菁菁
contentHash 是用于解决缓存问题的一种方式,与缓存类型本身无关。它可以作为文件名的一部分,在文件内容改变时生成不同的值,从而强制浏览器重新请求新的文件。浏览器请求新文件时,依然会走强缓存和协商缓存的逻辑,具体是命中哪一种缓存则取决于浏览器缓存规则的配置以及服务器端的响应头设置。
2023-04-07
共5条回复

美丽life

2022-06-20

老哥这是在一本正经的瞎扯啊。。。webpack 打包是在前端,后端产生的 etag 怎么回知道呢。。。

1
0

2024版 前端框架及项目面试 聚焦Vue3/React/Webpack

面向1-3年前端的框架及项目面试“刚需内容”

4665 学习 · 1644 问题

查看课程