操纵浏览器缓存

时间:2010-07-28 13:20:01

标签: javascript caching

我正在开发的Web应用程序使用大量异步加载的图像,这些图像通常会在保留URL时随时修改。这有几个问题:

  1. 如果我没有在HTTP标头中提供明确禁用缓存的图像,则用户通常会收到过时的图像版本,但这样做会大大增加服务器负载。
    如何从浏览器中取出缓存控件并手动评估是否应该使用缓存的图像或从服务器重新加载?

  2. 由于要加载许多单独的图像,我还会通过不同的主机名(即image01.example.comimage02.example.com并行化图像下载,但所有这些主机名都解析为同一物理服务器) 。由于主机名的NN是随机生成的,因此我也可以从浏览器缓存中检索到最新图像。我是否应该放弃这种做法并将其替换为其他内容?

  3. 您建议使用哪些缓存控制技术和进一步的阅读材料?

1 个答案:

答案 0 :(得分:2)

  1. 要强制加载,请向网址添加无意义参数

     <img src='http://whatever/foo.png?x=random'>
    

    其中“random”类似于毫秒时间戳。现在,如果您想要的是仅在图像被更改时重新加载图像,那么您必须确保您的服务器正在为图像设置“Etag”值,并且它正在使用适当的过期和“如果已修改”标题。最终,除了HTTP标头之外,您无法以任何方式远离浏览器。

  2. 不是随机生成NN,而是从图像名称的哈希生成NN。这样,相同的图像名称将始终映射到相同的主机名,并且您仍然可以在它们之间分布图像。

  3. 我没有一个好的建议,但互联网上的网络实施建议很多,所以我想从谷歌开始。