" ?${new Date().getTime()} " 如何更新 JS 中的图像

How does having " ?${new Date().getTime()} " updates the image in JS

我看了一个教程,他们展示了将 ?${new Date().getTime()} 附加到图像标签中 src 属性的值,用新图像更新当前图像。

我遇到了 this question,问题的第一个答案采用了相同的技术。

有人可以向我解释一下这项特殊技术的工作原理。谢谢!

不同的查询参数可能会导致服务器提供不同的图像,具体取决于后端逻辑。 通常并非如此 - 在许多设置中,请求具有不同查询参数的相同路径将在 return 中为您提供相同的图像,但情况并非总是如此。

如果浏览器看到缓存中已存在的图像 URL,它不会再次下载该图像 - 相反,它会从浏览器缓存中获取图像。但是,如果您将缓存中的 src 更改为 而不是 ,它将向服务器发出另一个请求。如果服务器在初始页面加载和 src 更改之间更改了该端点的图像,则服务器上的新图像将被下载并显示在客户端上。

new Date().getTime() 只是一种追加浏览器缓存中肯定不存在的字符串的方法。

最简单的解释是浏览器(通常是服务器)会在内存中缓存项目以减少页面加载时间。因此,如果您有十几个页面都引用了 /images/logo.png,图像将被下载并存储一次,以便可以在每个页面上重复使用。高效,对吧?

无论如何,有时图像会发生变化,而您不希望这种情况发生,所以您要做的就是更改文件的名称。例如/images/logo.png?15/images/logo.png?16/images/logo.png?17等。浏览器不再尝试使用缓存的图片,因为查询实际上是不同的。

您所包含的代码片段仅将当前时间包含在文件名中,以使其独一无二。