Javascript:无响应脚本错误

Javascript:无响应脚本错误,javascript,Javascript,我从Firefox收到一条错误消息“无响应脚本”。此错误是由于我在页面中添加了一些javascript造成的 我想知道这种无响应性是否完全是由代码循环(函数循环调用或无休止的“for循环”)引起的,或者可能还有其他原因 你能帮我调试这些错误吗 谢谢根据: 当JavaScript代码运行的时间超过预定义的时间量时,Firefox将显示一个对话框,显示警告:无响应脚本。此时间由设置dom.max_script_run_time和dom.max_chrome_script_run_time给出。增加这

我从Firefox收到一条错误消息“无响应脚本”。此错误是由于我在页面中添加了一些javascript造成的

我想知道这种无响应性是否完全是由代码循环(函数循环调用或无休止的“for循环”)引起的,或者可能还有其他原因

你能帮我调试这些错误吗

谢谢

根据:

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

此外:

找到问题的根源

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

检查错误控制台应该可以很明显地看出javascript的哪一部分导致了问题。从那里,要么删除有问题的代码片段,要么以不占用资源的方式对其进行更改


编辑:如本主题作者的评论中所述,强烈建议用于调试javascript问题。有一个关于使用断点调试复杂的javascript片段的有用视频。

避免这种情况的一种方法是用如下超时来包装性能差的代码片段:

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

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

这个问题的最佳解决方案:,使用异步jQuery插件。我遇到了一个类似的问题,通过将$.each更改为$.eachAsync解决了这个问题

  • 代码中可能有一个无限循环
    • 首先对代码进行注释,以确定是哪个部分导致了它
    • 循环太多:计数器变量名称可能发生冲突,导致变量不断重置,导致无限循环
  • 尽可能多地为对象创建哈希,以使读取时间为O(1),并以缓存这些数据的方式
  • 避免使用
    jslibs
    ,因为某些方法可能会导致开销。例如,
    .htm()
    vs
    .innerHTML
  • setTimeout()是和否——取决于代码的分块方式

  • 我们需要按照以下步骤停止Firefox中的脚本

    第一步 启动Mozilla Firefox

    步骤2 单击Firefox窗口顶部地址栏中的任意位置,突出显示整个字段

    步骤3 键入“about:config”(省略此处和全文中的引号),然后按“Enter”。“这可能会使您的保修无效!”警告消息可能会出现;如果确实如此,请单击“我会小心的,我保证!”按钮打开包含所有Firefox设置的页面

    步骤4 在页面顶部的“搜索”框中单击一次,然后键入“dom.max\u script\u run\u time”。设置被定位并显示;它的默认值为10

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

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


    重新启动Mozilla Firefox。

    如果您的代码正在等待AJAX回调,而这也可能是一个原因。获取Firebug并学习如何使用它。然后你可以自己调试这些错误。@Patrick我也有同样的问题..你解决了这个问题吗..检查你的服务器端代码中没有调试负载,可能在某个循环中。这就是我的问题——我在PHP中转储了一个大型数据结构。卸下这根绳子就解决了这个问题,嗯。通常,繁重的任务是在一个for循环中完成的。有关如何将具有繁重任务的For循环转换为系统地将控件传递回浏览器的结构的分步说明,请参见此处: