Webpack的文件指纹(file fingerprint)机制是指在打包生成静态资源时,为每个文件生成唯一的标识码。这个标识码通常是通过对文件内容进行 hash
计算得到的。一旦文件内容发生改变,其文件指纹也会发生改变,从而防止浏览器在缓存过期前使用旧的文件。
文件指纹有以下几种常见的类型:
Hash
:每次打包时,Webpack 会给每个输出的文件生成一个 hash 值。只要文件内容发生变化,其 hash 值也会发生变化。Chunkhash
:根据不同的入口文件进行依赖关系解析后,Webpack 会为每个 chunk 生成一个 hash 值。只有当前 chunk 内容发生变化时,其 hash 值才会发生变化。Contenthash
:采用文件内容的 hash 值作为文件指纹,只有文件内容发生变化时,其 hash 值才会发生变化。适用于样式文件、图片文件等。
缓存机制是指浏览器在加载页面时,会将静态资源(如 JS、CSS、图片等)保存在本地,以便下次加载相同资源时可以直接使用缓存副本,从而提高网页加载速度。缓存机制分为强缓存和协商缓存两种方式。
- 强缓存:通过设置
Response Header
中的Cache-Control
或Expires
字段,告诉浏览器静态资源的有效期。在有效期内,浏览器会直接从缓存获取资源,无需向服务器发起请求。 - 协商缓存:通过设置
Response Header
中的Last-Modified
和ETag
字段,告诉浏览器静态资源的版本信息。在请求资源时,如果浏览器的缓存仍然有效,则会发送一个请求到服务器,服务器会根据请求中的If-Modified-Since
和If-None-Match
字段进行验证,返回304
状态码,并告诉浏览器可以使用缓存,从而减少数据传输。