此页面上的脚本导致ie运行缓慢

时间:2008-10-17 15:05:29

标签: javascript internet-explorer

问题在于标题 - IE是行为不端,并且说有一个脚本运行缓慢 - FF和Chrome没有这个问题。

我怎样才能找到问题所在。那页上有很多JS。手工检查不是一个好的想法

编辑:这是我正在处理的项目中的一个页面...但我需要一个工具来查找问题。

结束:原来是UpdatePanel - 它会以某种方式“混淆”并且需要很长时间来处理某些事情。我只是把它扔出窗外 - 从现在开始只使用JQuery:D。

我正在选择Remy Sharp的回答,因为我真的不知道这个工具,看起来很酷。

14 个答案:

答案 0 :(得分:52)

不同浏览器会以不同方式检测长时间运行的脚本:

  • IE将在执行了500万条陈述后发出警告(more info on MSDN
  • 如果脚本花费的时间超过10秒(more info on MDN
  • ,Firefox将发出警告
  • Safari会在脚本耗时超过5秒时发出警告
  • Chrome(1.0)没有设置限制,只会继续尝试,直到OutOfMemory异常,此时崩溃
  • Opera将继续无限制地继续运行。

Nicholas Zakas has written an excellent article covering this topic.

因此 - 避免这些问题的最佳方法是减少循环,递归和DOM操作。

答案 1 :(得分:18)

获取IBM Page Profiler的副本:

https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=61d74777-1701-4014-bfc0-96067ed50156

它是免费的(总是一场胜利)。在后台启动它,给它几秒钟,然后在IE中刷新页面。返回探查器,它将列出页面上使用的所有资源,并为您提供详细的配置文件信息 - 特别是JavaScript需要很长时间才能执行的地方。

找到问题的根源应该是一个良好的开端。

如果脚本标记是内联的,我建议创建该文件的本地副本,并在可能的情况下将脚本标记分离为单独的文件。

答案 2 :(得分:9)

删除一半代码并查看是否仍然发生。如果不是,那就是你移除的一半。重复,直到找出导致问题的代码块为止。

答案 3 :(得分:3)

通常是一个无限循环导致这种情况。检查你的循环及其退出条件。

答案 4 :(得分:1)

对于IE,该对话框基于已处理的JS命令。请看这里的信息和&更改默认值的方法:http://support.microsoft.com/kb/175500

答案 5 :(得分:1)

您还可以检查您的网页中是否包含Google Analytics javascript。该错误仅发生在IE上,一旦谷歌代码被删除,它就有效了!

答案 6 :(得分:1)

确保以下JavaScript代码只运行一次:

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(win_onload);

上面的代码在函数win_onload()内。

答案 7 :(得分:1)

我发现添加警报('在X之前')警报('在X之后')有助于我找到我的问题。我将它们添加到我的$(function(){

}

答案 8 :(得分:0)

我不相信有一个工具可以找到有问题的脚本。您可能会尝试附加一个IE调试器,如Visual Studio,也许它会在问题发生时中断。但我无法保证这项工作。

在过去,当我遇到类似的问题时,我只是简单地评论了代码段,以测试问题的缩小范围,通常采用二进制搜索类型模式。评论一半的JavaScript库等......

除了其他人所说的,这种类型的问题发生在大循环和许多setTimeout函数调用或setTimeout递归循环中。

答案 9 :(得分:0)

如果javascript绑定页面处理超过10秒,您会收到此消息。 IE显然有一个较慢的javascript引擎,导致这种情况。

我猜测一些代码优化肯定会有所帮助,并尝试减少页面加载时执行的javascript数量。如果必须的话,也许可以使用setTimeout()来处理一些不必要的事情。

就工具而言,使用Firebug的分析器来查看你花费这么多时间的地方。

答案 10 :(得分:0)

如果您可以控制JavaScript,可以将其分解为单独的脚本或尝试使用Lazy Load方法。

只是我的$ .02

答案 11 :(得分:0)

在我的情况下,在GridView中绑定了很多行的ASP.NET HoverMenuExtender控件太多导致性能极慢。我删除了HoverMenuExtender,我的速度问题(以及对话框)消失了。与弹出对话框的原因并不完全相关,但它可能对某人有所帮助。

答案 12 :(得分:0)

@ nikmd23回答是有用的..

我的2美分......我遇到了脚本警告问题 - 由于在dropdown list循环的帮助下加载for个项目。

我在Disabling the long-running-script message in Internet Explorer中提到了@Eric Leschinski的帖子。

请参阅setTimeout for loading items in a dropdown list,了解我是如何解决此问题的

答案 13 :(得分:0)

这种警报几乎没有理由

  1. 没有。 IE执行的JS指令超出了预定义的限制。这可以通过编辑Windows注册表来修复,请参阅Here

  2. 优化javascript代码,以减少执行时间。

  3. JS代码优化是一个真正的试验和错误主题,并且很少有拇指规则这样做。只是Google吧。