使用IE6令人难以忍受的缓慢AJAX

时间:2010-08-15 10:14:20

标签: jquery apache internet-explorer internet-explorer-6

我敢肯定,这个头衔会激起许多读者的“我们再来......”的反应。道歉。我用Google搜索了这个问题并得到了电话簿。主要是关于SSL,必须说。其他人指出IE中可怕的JS引擎。我找到的互联网咆哮都没有给我带来满意的答复。所以我想我会在这里发帖......

我正在构建一个Web应用程序,主要是在Firefox中开发的(因为Firebug),在Opera,Chrome,Safari和IE中进行了测试。很多jQuery,很多AJAX。 Web服务器是Win XP上的Apache。浏览器响应通常非常快(网络服务器在局域网上没有其他任何东西),IE除外,它的速度非常慢。

我的代码通常按以下方式构建:

module1= function() {
    // JS code backing html in div1
};

$div1.load("div1.html",function() {
    module1();
});

也就是说,module1的JS代码是浏览器从“go”一词中知道的,虽然我希望在所有浏览器中推迟编译此代码,直到我实际调用module1()闭包,成功加载()。因此,我可以很容易地相信,IE中可能存在的慢速JS引擎会产生阻力(显示div1)。然而...

我注意到,虽然IE6会延迟加载我的HTML代码段和所有附带组件(主要是图像),但当我启动另一个浏览器(以节省时间)并加载我的网站时,该浏览器将一直挂起,直到IE完成下载的时间。也就是说,IE完全破坏了我的Apache服务器。

这让我觉得这主要不是一个缓慢的JS解释问题。事实上,Apache和IE之间可能存在一些握手问题。我在Apache的日志中没有这方面的证据,因此我想我会问。

有没有人有任何想法? Apache上是否存在(已知)配置问题?

PS:我可能会补充一点,在这些长期的后期加载过程中,IE的状态栏 - 我相信,这是一个不可靠的进度指示器 - 经常显示我的图标的URL(即非常小的.gif和.png文件)

1 个答案:

答案 0 :(得分:0)

最近与IE6合作我可以指出一件对我们有帮助的事情。 我们回顾了所有jQuery代码,以便添加很多(实际上很多):

SetTimeout(function() { <HERE TO REGULAR CODE WE HAD>,0});

这个强制重绘IE6上的事件(某些新的执行环境,如果我理解IE6 js那么重绘),并且至少,用户可以看到已加载的页面部分。在加载回调时非常有用。因此,至少用户感知更好,页面的块出现并且用户对速度的感知更好。但似乎整个实时也更好。

关于IE6 apache交互,因为你的apache服务器不在你的计算机上但在局域网上你应该尝试:

  • 从另一台机器测试网站,而不是运行IE6(运行困难)的机器
  • 激活mod_status并检查网址 /状态,看看是否有几个工人 由IE6使用或仅使用一个

IE6可能存在Keepliave请求的问题,或者他可以在一台服务器上运行的并行查询数量有限制。但是,为此我们在问题发生时需要有关HTTP流量的更多信息(并且服务器状态至少是一个好的,请检查扩展状态)。