ETag 与 webpack 的哈希值

Kai*_*Kai 5 etag caching webpack

我们正在重新设计整个资产构建流程,以使用 100% webpack。在此过程中,我想使用其哈希功能(例如 [name].[chunkhash].js)来改进缓存。

但我的后端同事说不需要,我们应该使用 ETag 来代替缓存。所以文件名中根本没有哈希值。

我喜欢这个想法,但我想知道如果可以使用 ETags,为什么捆绑器要提供此哈希功能。

有人有 ETag 的经验并知道其优点/缺点吗?(顺便说一句,我们正在使用自定义 PHP 后端)

Kev*_*nry 1

散列文件名和使用ETags有不同的目的。

当您使用散列文件名时,您正在引用一个新的、唯一的资源。第一次获取时,将从服务器加载,并且可以永久缓存。重要的是,您的代码不会中断,因为您的 HTML 仅指向它所依赖的特定版本化资产。

ETags相比之下,用于对已缓存资源进行条件验证。当资源超出其缓存时间并且浏览器想要检查当前版本是否仍然有效时,将使用它们。因此缓存时间将是有限的,浏览器将被迫与服务器检查以查看文件是否已更改。更重要的是,如果您提供的页面依赖于新版本的资源,而旧版本的资源仍然被缓存,那么您的网站可能会崩溃。

因此,虽然ETags它们非常有用,但当涉及到静态文件时,它们并不能替代散列文件名。

  • 好的,我明白了,检查 ETag 是一个额外的请求。但另一方面,使用唯一的文件名(例如 main.1234.css)需要在资产构建过程中注入模板,如果资产构建过程在服务器上执行(在部署时),这也可能是一个糟糕的选择)。到目前为止,我仍然不知道为什么你应该总是更喜欢唯一的文件名而不是 ETag。我觉得这要看个人环境——这个我得跟后端同事商量一下。但还是感谢您的回答! (2认同)