Javascript:无响应的脚本错误

Javascript:无响应的脚本错误

问题描述:

我收到Firefox“无响应脚本”的错误消息。这个错误是由于我添加到我的页面的一些JavaScript。Javascript:无响应的脚本错误

我想知道如果无响应是由代码循环(函数互相调用循环或无休止的“循环”)或可能有其他原因造成的吗?

你能帮我调试这些类型的错误吗?

感谢

+0

究竟什么是你问? – SLaks 2010-04-21 19:55:23

+1

如果您的代码正在等待AJAX​​回调,并且花费很长时间也可能是一个原因。 – Kasturi 2010-04-21 19:57:02

+1

获取Firebug并学习如何使用它。然后你可以自己调试这些错误。 – Robusto 2010-04-21 19:59:17

按照Mozzila Knoledgebase

当JavaScript代码的时间超过预定量不再运行,Firefox会显示一个对话框,上面写着警告:脚本没有响应。这个时间由设置dom.max_script_run_time和dom.max_chrome_script_run_time给出。增加这些设置的值将导致警告的出现频率降低,但会失去目的:通知您扩展或网站出现问题,以便您可以停止失控脚本。

此外:

发现问题

要确定哪些脚本运行时间过长的来源,点击警告对话框停止脚本按钮,然后转到工具|错误控制台。错误控制台中的最新错误应标识导致问题的脚本。

检查错误控制台应该很明显你的JavaScript的哪一部分是造成这个问题。从那里,或者删除违规的代码片段,或者改变它,使其不会像资源密集型一样。

编辑:正如在该主题作者的评论中提到的,强烈建议使用Firebug来调试javascript问题。 Jonathan Snook在使用断点调试javascript的复杂部分时有一个有用的视频。为了避免这种

一种方法是用这样的超时来包装你可怜的高性能的代码:

setTimeout(function() { 
// <YOUR TIME CONSUMING OPERATION GOES HERE> 
}, 0); 

这不是防弹的解决方案,但它可以在某些情况下解决这一问题。

+1

通常,繁重的任务是在for循环中。有关如何将带有繁重任务的for循环转换为将系统控制传回浏览器的结构的详细说明,请参阅:http://stackoverflow.com/questions/4460263/disabling-the-long-运行脚本,消息在互联网资源管理器/ 11619030#11619030 – 2012-07-23 19:58:42

在这个问题上的优秀解决方案:How can I give control back (briefly) to the browser during intensive JavaScript processing?,通过使用异步jQuery插件。我有一个类似的问题,解决它通过改变我的$。每次为$ .eachAsync

  1. 有可能被注释掉的代码,以确定哪些部分导致它是一个无限循环中的代码
    • 开始的地方
    • 太多循环:有可能您的计数器变量名称发生冲突,导致变量保持重置状态,导致无限循环。
  2. 尝试尽可能地为你的对象创建哈希以至于读取时间为O(1),并以某种方式缓存的数据
  3. 忌用js libs一些方法可能会引起开销。例如。 .htm() VS .innerHTML
  4. 的setTimeout()yes和no - 取决于你如何chunkify你的代码

我们需要按照这些步骤在Firefox停止脚本。

步骤1 启动Mozilla Firefox浏览器。

步骤2 点击在Firefox窗口顶部的地址栏中的任意位置,以突出整个领域。

步骤3 输入 “about:config中”(在这里和整个省略了引号),然后按 “Enter” 键。 A“这可能会使您的保修失效!”警告信息可能会出现;如果有,请点击“我会小心的,我保证!”按钮打开包含所有Firefox设置的页面。

第4步 在页面顶部的“搜索”框中单击一次,然后键入“dom.max_script_run_time”。该设置位于并显示;它的默认值为10.

步骤5 双击设置以打开“输入整数值”窗口。

步骤6 输入“0”,然后单击“确定”将值设置为零。 Firefox脚本现在无限期运行,不会抛出任何脚本错误。 步骤7

重新启动的Mozilla Firefox。