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 状态码,并告诉浏览器可以使用缓存,从而减少数据传输。