代码之家  ›  专栏  ›  技术社区  ›  Ed Harper

经典的ASP-IIS5到IIS6迁移会导致图像缓存问题吗?

  •  1
  • Ed Harper  · 技术社区  · 16 年前

    为这个冗长的问题提前道歉。

    UI显示从数据库返回的项目的层次结构,在用户导航时使用HTML无序列表和javascript的组合来隐藏/扩展分支。

    图像通过CSS(使用列表样式图像)显示在列表成员旁边,为每种类型的项目使用不同的图像。层次结构中不同项目类型(因此图像)的数量在2到10之间变化。层次结构在20到200个项目之间变化。

    自从迁移到IIS 6以来,一些用户遇到了一个问题,这似乎是由于图像未能正确应用于层次结构中的一个或多个项目所致;列表显示正确,但缺少一个或多个图像,单击任何链接都会导致加载空页面。

    这个问题似乎与客户端的内容缓存有关:它似乎更经常地影响那些以前没有在当前PC上使用过应用程序,或者已经有一段时间没有使用过应用程序的用户。 此外,通过启动会话,清除浏览器缓存,然后刷新页面,我可以在三次尝试中复制一次问题。但是,在IIS 5上运行的应用程序也是如此,因此此问题可能在迁移到IIS 6之前就存在,但发生的频率较低。 偶尔,如果我离开会议20分钟左右,浏览器似乎“找到”丢失的图像,一切正常。

    我对调试ASP/IIS问题的有限知识已经到了极限。 从CSS中删除列表样式的图像可以解决这个问题,但这必须是最后的选择,因为这会使应用程序更加难以使用。

    如有任何关于我如何进行的建议,我们将不胜感激。

    AnonJr建议这一定是客户机配置问题,因为所有其他组件似乎都正常工作。

    我忽略了一个简单的客户端配置问题,因为这是唯一受所述问题影响的应用程序 我已测试了“工具”下的所有选项>互联网选项>临时文件>行为没有改变的设置。

    我应该考虑哪些其他客户端配置选项?

    接受的答案促使我搜索一个已知问题,即当从客户端脚本生成HTML时,IE6请求多个图像副本- http://support.microsoft.com/default.aspx?scid=kb;en-us;319546 .

    <DIV style='display:none'><IMG SRC='image.gif'></DIV>
    

    这对我来说似乎是有效的——我不能通过在会话中间清除浏览器缓存来复制问题,而FIDLE跟踪则显示每个图像只被请求一次。

    我确实发现了一个我以前不知道的警告;IE缓存区分大小写,因此只有在不可见DIV中指定的文件名大小写与页面中其他地方使用的文件名大小写匹配时,才会使用缓存的图像。

    2 回复  |  直到 13 年前
        1
  •  1
  •   AnthonyWJones    16 年前

    这有点像IE6错误,浏览器对同一资源发出多个请求。例如,如果内容要求在列表中显示重复20次的小图标,而不是仅获取该图像一次,它将尝试获取该图像20次。OK 19个响应没有被修改,但是仍然有19个额外的往返到服务器。

    我发现在过去,这种过度的请求最终会导致太多未填满的请求。在这一点上,对服务器的进一步请求,即使是对其他页面的请求,也很难得到响应,至少在一段时间内是如此。

    我不确定在你的案例中是否会发生这种情况,检查这种情况的一种方法是使用IE7,看看你是否遇到同样的问题,这个错误在IE7中得到了修复。

    编辑 :现在问题被确认是我提到的bug,你也应该注意KB提到的“短时间延迟”。潜在的问题是,为了重新使用新获取的图像,浏览器需要执行延迟到当前javascript块完成的工作。不仅需要“短时间延迟”,还需要异步方法。

    我使用了display:none-DIV方法来预取图像,这对于AJAX风格的工作非常有效。但是,如果在窗口的onload事件期间或之前运行了代码,那么在代码中添加图像时仍然会出现问题。需要设置超时,以便在onload事件完成后运行更多代码。

        2
  •  0
  •   AnonJr    16 年前

    代理可能会缓解一些问题,和/或它可能是IE6决定如何缓存图像等的一个因素。