Javascript “有”是怎么回事${new Date().getTime()}”;在JS中更新图像

Javascript “有”是怎么回事${new Date().getTime()}”;在JS中更新图像,javascript,datetime,updates,src,Javascript,Datetime,Updates,Src,我观看了一个教程,其中显示在图像标记中的src属性值后面附加?${new Date().getTime()},会用新图像更新当前图像 我遇到了一个问题,问题的第一个答案采用了同样的技巧 有人能给我解释一下这项技术背后的原理吗。谢谢 不同的查询参数可能导致服务器提供不同的图像,具体取决于后端逻辑。通常情况并非如此-在许多设置中,使用不同的查询参数请求相同的路径将返回相同的图像,但情况并非总是如此 如果浏览器看到缓存中已经存在图像的图像URL,它将不会再次下载图像,而是从浏览器缓存中获取图像。但是如

我观看了一个教程,其中显示在图像标记中的src属性值后面附加
?${new Date().getTime()}
,会用新图像更新当前图像

我遇到了一个问题,问题的第一个答案采用了同样的技巧


有人能给我解释一下这项技术背后的原理吗。谢谢

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

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


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

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

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


您包含的代码片段只是将当前时间包含到文件名中,以使其唯一

您正在将图像源设置为相同的字符串。这将不会刷新图像,浏览器认为它已经拥有该图像,并且不会发出另一个请求。每次要刷新时,请尝试添加随机查询参数
?${new Date().getTime()}
,然后浏览器应将图像视为不同的资源。这个关于链接问题的答案让我们了解了它的作用