2011-09-23 122 views
0

在堆栈溢出中有很多预加载脚本示例可用,但有没有一种方法可以检查浏览器是否已将图像预加载到缓存中,如果是,则不会启动/超过使用.load()函数预加载图像并让浏览器放入图像中?缓存中的jQuery图像预加载

回答

1

我不这么认为,但更重要的是,如果您的浏览器已经有图片,它不会尝试重新加载它(它只会询问服务器的标题,并看到图像没有改变)。

如果你愿意,你可以在图像上放置'far futures expires'头文件,这样浏览器甚至不会尝试检查服务器,只是假设它缓存中的任何图像都没问题。这将有效地做你所问。

我觉得Yahoo说,它比我好的人:

浏览器(或代理)使用缓存以减少 HTTP请求的数量和大小,制作网页加载速度更快。 Web服务器使用HTTP响应中的 Expires标头告诉客户端可以缓存多长时间的组件。这是一个遥远的将来Expires头,告诉 浏览器,这一措施将不会过时,直到4月15日,2010年 到期日:星期四,2010 04月15日20:00:00 GMT

如果您的服务器是Apache的,使用ExpiresDefault指令设置相对于当前日期的 到期日期。此示例的 ExpiresDefault指令将过期日期设置为从请求的 时间起10年。 ExpiresDefault“access plus 10 years”

请记住,如果您使用远期未来过期标题,则必须在组件更改时更改组件的文件名。在 Yahoo!我们经常将此步骤作为构建过程的一部分:组件的文件名中嵌入了 数字,例如, yahoo_2.0.6.js。

所以基本上,你可以把标题Expires: Thu, 31 Dec 2030 0:00:00 GMT和浏览器不会再去寻找另一个图像29年左右:))。当然,这意味着如果你改变图像,你必须重新命名它们。

+0

我明白你在说什么,但如果图像已被浏览器缓存起来,是否可以使用javascript进行检查,因此我不需要触发.load()事件。加载后的所有图像都淡入淡出,我试图实现的是:如果图像已被浏览器缓存起来,不会触发.load()事件,只是让浏览器填充它们,以使javascript fadeIn不会不采取行动。 – Alex