即使缓存了新图像也会生成http请求?

时间:2010-05-13 05:21:41

标签: javascript http firefox prototypejs

我有一个javascript幻灯片,动态创建下一张幻灯片,然后将其移动到视图中。由于图像实际上是精灵,src是transparent.png,实际图像是通过background:url( ..在css中映射的。

每次(好吧,大部分时间)脚本都会创建new Element,Firefox会为transparent.png发出http请求。我有一个远期的expires标题,Firefox尊重所有其他文件的到期日。

有没有办法避免这些不必要的请求。即使服务器正在返回304 unmodified响应,如果Firefox会尊重动态创建的图像的到期日,那将是很好的。

我怀疑如果我注入一个简单的字符串而不是使用new Element,这可能会解决问题,但我在Prototypes扩展Element对象上使用了一些方法,所以我想避免一堆我的js文件中的html字符串。

这是一个挑剔的问题,但我现在正在进行前端优化,所以我想我会解决它。

感谢。

@TJ Crowder这是两张图片:http://tinypic.com/r/29kon45/5。第一个表明trans.png的请求正在激增。第二个显示了标题的示例。感谢

@all只是重申一下:真正奇怪的是,即使所有图像都是通过相同的逻辑创建的,它只会在一半的时间内完成这些不必要的请求。

2 个答案:

答案 0 :(得分:2)

我知道这并不能解决为什么Firefox会忽略你的缓存时间,但你总是可以绕过这个问题,而不是使用幻灯片的图片标签。如果您将幻灯片设置为空div标签并仅将精灵应用为背景,则Firefox将不再需要进行任何请求。

修改

根据this site的解释,Firefox并没有忽略你的缓存时间。如果图像已过期,则浏览器应该再次请求图像。如果时间尚未到期(在这种情况下发生),那么浏览器应该发出条件GET请求。我认为你不能摆脱它。

我认为Firefox只会在一半的时间内发出请求,因为它只是在之前的请求中收到了图像的“304 Not Modified”状态,并且如果它们发生得足够快,则希望相信后续请求。

答案 1 :(得分:0)

这是一个缓存问题。通过更改Web服务器添加的“响应标头”,可以通过多种方式来控制浏览器缓存。我通常使用ETagExpires

的组合

如果响应标头中存在冲突或不完整的缓存说明,某些浏览器可能会忽略它们并获取最新版本的资源。