【发布时间】:2012-01-06 14:03:45
【问题描述】:
我有一个 AJAX 调用,它返回一些 JSON,包括一些图像 URL。我想为他们添加图像到 DOM,但我会一遍又一遍地获取相同的图像,我不想增加我的带宽成本。默认情况下,浏览器不会为我缓存这些图像 - 如果我使用 JQuery 创建一个 img 元素并附加它,浏览器会在我每次执行此操作时请求该图像。
所以我以隐藏 div 的形式添加了一个缓存,如下所示:
<div id="imageCache" style="display: none;"></div>
然后在循环遍历从服务器返回的可能有 imageKey 的 JSON 对象时在 JQuery 中执行此操作:
if (post.imageKey) {
var cachedImage = $("#imageCache ." + post.imageKey);
if (cachedImage.length) {
var newImage = $(cachedImage).clone();
$("#" + post.key).append(newImage);
}
else {
var newImage = $("<img src='/image?key=" + post.imageKey + "' alt='" + post.title + "' class='offeredPost " + post.imageKey + "'/>");
$("#" + post.key).append(newImage);
cachedImage = $(newImage).clone();
$("#imageCache").append(cachedImage);
}
}
但没有快乐。克隆的图像被添加到 DOM 中,但是一旦 JS 完成页面,浏览器 (Chrome) 就会对图像发出新的请求。
有什么想法吗?谢谢。
【问题讨论】:
-
浏览器可能没有缓存图像,因为您在 SRC 中使用了查询字符串。你可以为这些图片使用静态 URL 吗?
-
@mblase75 只有在查询字符串发生变化时才会出现这种情况。这就像在 url 末尾添加一个随机数以强制每次重新加载的旧技巧。它只起作用因为数字不同。
-
@Archer 谢谢,我确实记得——我只是没有足够的信息来确定 OP 的
post.imageKey不会每次都在变化。以为我会把它扔在那里让他考虑。 -
不,
post.imageKey每次都是一样的 - 它是图像的 ID。把它从查询字符串中拉出来没什么大不了的,但我认为 Archer 是对的。
标签: jquery image browser-cache