假设您生成了三个捆绑包:
main.js
main.css
vendor.js
main.js 文件中引用的 main.css。
哈希:
将为每个构建生成哈希数。生成的哈希数
所有捆绑的文件都将相同。
例如:
Hash: 66e665r76798c278ytr6
Generated Files:
main.66e665r76798c278ytr6.js
main.66e665r76798c278ytr6.css
vendor.66e665r76798c278ytr6.js
所有三个文件都将包含相同的哈希数。这个哈希值是一样的
只要您没有更改文件的任何内容。即使您运行许多构建
在不改变任何内容的情况下,哈希数将相同。
ChunkHash:
在这种情况下,将根据入口点生成哈希数
并且所有文件都会有所不同。
Hash: 66e665r76798c278ytr6
Generated Files:
main.77e665r76798c278ytr6.js
main.78e665r76798c278ytr6.css
vendor.79e665r76798c278ytr6.js
如果您没有更改供应商文件,则生成的供应商文件的哈希值将相同。
但是如果你添加任何新的供应商,hash number 将会改变。
如果您在 main.js 中进行了任何更改,main.js 和 main.css
将有新的哈希数字,因为哈希数字是根据入口点改变的。
内容哈希:
仅当您对特定的内容进行任何更改时才会生成哈希
文件,每个文件都有唯一的编号。
例如,如果您只更改了 main.js 文件,则只会生成新的哈希
对于更改的文件,其他两个哈希将与以前的构建相同
Chunkhash 和 ContentHash 都会为每个生成的文件生成哈希值。
唯一的区别是 ChunkHash 基于入口点生成哈希。
在大多数情况下,您将使用 ContentHash 进行生产。
借助 contenthash,您可以在浏览器中实现长期缓存。
只要哈希值保持不变,浏览器就会提供缓存文件。
https://github.com/webpack/webpack.js.org/issues/2096
长期缓存:
为了提高应用加载时间,我们经常使用缓存。在应用程序的初始加载期间,我们可以设置标题
对于作为 Cache-Control 的资产:max-age=31536000。之后,浏览器将缓存资产和后续
请求将从缓存中获得。
没有散列:
假设您对某些资产(例如 main.js)进行了更改,因为您已将 max-age 指定为 31536000,因此新的更改将
没有得到反映,浏览器将继续从缓存中提供服务。
使用散列:
为了覆盖它,我们在所有文件中使用哈希。如果您对文件进行了任何更改,新的哈希将是
生成,浏览器将其视为新请求。
示例:
您仅在 main.js 中进行了更改。在 [hash] 的情况下,所有文件都将获得新的哈希数。浏览器
将所有三个都视为新请求并发出三个新请求以获取文件
[contenthash] 不是这种情况。如果你提到了 contenthash,那么只有 main.js 的 hash 会被改变。
其他两个文件将具有相同的哈希值,并将继续从浏览器缓存中提供服务。
这将缩短您的应用加载时间。
如果您需要实现长期缓存,则建议
使用 contenthash 而不是普通的哈希。
生成哈希会增加应用编译时间。所以你会
在生产过程中使用 contenthash/hash。
有关长期缓存的更多信息:https://developers.google.com/web/fundamentals/performance/webpack/use-long-term-caching