我有,我会考虑,一个简单的测试网站。单个页面,只有一个按钮。
Here is a copy of the source如果您想下载并使用它,我正在努力。
单击该按钮时,它会创建一个每秒执行一次的JavaScript计时器。执行计时器功能时,将进行AJAX调用以检索文本值。然后将该文本值放入DOM中。
我的问题是什么?
IE缓存。
破解打开任务管理器并观察当该页面中的计时器正在执行时iexplorer.exe进程(对我来说是IE 8.0.7600.16385)会发生什么。
看到内存和句柄数量变大了吗?
alt text http://www.joshuahayworth.com/content/HandleCount.png
为什么会发生这种情况,从各方面来看,我都关闭了缓存。我在$ .ajaxSetup中将jQuery缓存选项设置为false。我已将CacheControl标头设置为no-cache和no-store。 Expires标头设置为DateTime.Now.AddDays(-1)。标头在页面代码隐藏以及HTTP处理程序的响应中设置。
有人对我如何阻止IE缓存AJAX调用的结果有任何想法?
这是iexplorer.exe进程在ProcessMonitor中的样子。我相信这张照片中显示的活动正是我试图阻止的。
alt text http://www.joshuahayworth.com/content/ProcessMonitor.png
答案 0 :(得分:1)
当你告诉浏览器不要缓存对象时,你不是说“不要把它保存到磁盘上”,而是说“做任何事,但不要再使用它”。您看到的句柄号是文件句柄,只是因为它没有被用于缓存并不意味着文件没有被写入,而是一个随之而来的句柄。
你告诉IE的是当你再次要求该网址时,你保存的文件不是有效的结果......所以再去拿它,但这与它没有任何关系第一次被救了。
你看到的唯一问题是IE没有快速释放那些文件句柄......那就是IE,我无法解释那里的内部工作原理。也许其他人可以解决一些问题?
答案 1 :(得分:1)
无法真正揭示IE的内部,或者不断增长的内存和处理数量,但潜在的快速和肮脏的修复方法是为ajax调用添加一个变化的参数,可能基于你的计时器,或从当前时间滴答。
有些东西...... handler.axd?foo = varying_value_here
HTH