响应和页面加载之间的Javascript页面差距为15秒

时间:2012-02-09 08:14:24

标签: javascript internet-explorer delay

我有一个页面(A),这是一个沉重的javascript页面,当我离开此页面转到页面B时需要很长时间。当我从另一个页面转到页面B时,它真的很快。所以它与页面A有关,可能还有它的javascript。

当我从IE 9中的开发人员工具运行网络探查器时,它在响应和DomContentLoaded(事件)之间显示约15秒的间隔。

页面A很重要,因为它运行Xopus编辑器,一个富文本XML编辑器。

是否有人对我能做些什么有任何想法,要么分析关于发生了什么的差距,或者我可以做些什么来使页面A更快地卸载。

3 个答案:

答案 0 :(得分:2)

这是一个很长的镜头,因为它有大约一百一百个错误,但它可能是一个开始的地方。将此脚本标记添加到您的页面中作为最后一个:

<script>
    function unloadJS() {
      var scripts = document.getElementsByTagName("SCRIPT");
      for (var index = 0; index < scripts.length - 1; index++)
      {
        var file = scripts[index].getAttribute("src");
        var start = +new Date();
        scripts[index].parentNode.replaceChild(document.createElement('script'),
                                               scripts[index]); 
        var elapsed = +new Date() - start;
        alert(file + ": " + elapsed.toString());
      }
      return false;
    }
</script>

此代码尝试强制卸载页面上加载的每个JavaScript文件,并以毫秒为单位报告丢弃它们所需的时间。在方便时点火,即卸载或按钮:

<button onclick="return unloadJS()">Go!</button>

这可能不起作用/告诉您需要知道的内容,因为IE可能会在脚本断开连接时拒绝进行垃圾回收。这可能是因为当你这样做时,IE真的不会卸载它们,或者只是因为IE - 好吧,oddi说的话:)

无论如何,这不是解决方案; JS卸载时无关紧要,垃圾收集仍然需要相同的时间。这只是第一次诊断的尝试,就像你要求的那样。希望它有效/有帮助......

答案 1 :(得分:2)

IE sucks。但是有几种工具可以分析您的页面。

FiddlerHttpWatch是分析您的请求时间表并查看是否需要很长时间才能下载所有繁重的JavaScript代码的好工具。这通常是减缓重度js页面的主要原因。自IE doesn't take parallel downloading js very well以来,数百个小型javascript文件需要花费更多时间。

对于这种情况,请尝试minifying your javascript。这是提高页面加载性能的最直接方法。

如果没有多大帮助。您可能需要YSlow来分析详细的效果。虽然它不适合IE,但修复Chrome或FF下的某些问题会影响IE下的性能。

在控制台中添加一些日志,缩小范围,也许您可​​以找到执行性能问题。

答案 2 :(得分:0)

也许你正在使用像PrototypeJS这样的Javascript库挂钩到页面unload事件,当页面卸载时,它会遍历一个数组,删除页面上所有DOM元素的所有事件监听器。如果我们知道您正在使用哪些库,我们可以模拟调用以卸载页面以强制库执行它的卸载功能。然后,启动计时器以查看加载另一页所需的时间。