Webpack 为什么经常使用MD5哈希来防止加载过时的CSS、JavaScript和媒体文件?

Webpack 为什么经常使用MD5哈希来防止加载过时的CSS、JavaScript和媒体文件?,webpack,gulp,md5,Webpack,Gulp,Md5,我理解为什么在为生产构建项目时,我们需要使CSS、JavaScript和媒体文件(如图像)的名称具有唯一性。我不明白为什么使用MD5来达到这种效果如此流行,例如: 要生成像main.7e2c49a622975ebd9b7e.js这样的文件名,我们需要读取文件并创建内容的MD5。似乎这需要很多时间,尤其是在高清图像和视频的情况下 如何生成唯一的文件名,还有其他一些选择: 使用UNIX时间戳 使用Math.random() 只有两个实例,但我看不出有什么原因需要进一步研究。一个主要原因是,如

我理解为什么在为生产构建项目时,我们需要使CSS、JavaScript和媒体文件(如图像)的名称具有唯一性。我不明白为什么使用MD5来达到这种效果如此流行,例如:

要生成像
main.7e2c49a622975ebd9b7e.js这样的文件名,我们需要读取文件并创建内容的MD5。似乎这需要很多时间,尤其是在高清图像和视频的情况下

如何生成唯一的文件名,还有其他一些选择:

  • 使用UNIX时间戳
  • 使用
    Math.random()

  • 只有两个实例,但我看不出有什么原因需要进一步研究。

    一个主要原因是,如果文件内容不变,哈希值也不会改变。如果哈希值没有改变,这意味着用户的浏览器在下一次部署后不必下载文件(因为浏览器缓存了上一次页面加载的文件)


    如果使用时间戳,则每次部署时,每个文件名都会更改,从而导致用户的浏览器必须重新下载项目中的每个文件…甚至是内容未更改的文件。如果您经常部署代码,这可能会对性能造成极大的负面影响。

    使用文件哈希的好处是,我们可以很快看出文件没有任何更改,即使它是在以后创建/上载的。如果更改一个文件,然后重新构建/部署项目,则其他所有文件仍然有效,并且它们的缓存版本仍然可以使用。如果我们使用了compile/pack时间戳,它们将被视为新文件。unix时间戳如何告诉您新生成的文件是否不同?如果内容相同,但时间戳不同,这并不能真正告诉你它是否过时。md5散列确实如此。