【问题标题】:Maximum execution time for JavaScriptJavaScript 的最长执行时间
【发布时间】:2011-03-03 01:58:50
【问题描述】:

我知道 ie 和 firefox 对 javascript 执行都有限制(Source 1Source 2)。根据执行的语句数量,我听说在 IE 中某处是 500 万,并且基于 Firefox 中的秒数:我的版本默认为 10 秒。

我不明白什么情况下会超过这些限制:

  1. 我确信一个巨大的循环会超过执行时间的限制

  2. 但是,如果事件处理程序本身的执行时间低于限制,但如果它发生多次,事件处理程序会超出限制吗?

例子:

假设我的页面上有一个计时器,它每 20 秒执行一次 javascript。计时器处理程序的执行时间为 1 秒。 firefox 和 ie 是否分别处理计时器函数的每次调用,因此它永远不会超过限制,或者 firefox/ie 是否会在处理程序完成后将每次调用的时间加起来,所以在我的网站上 200 秒后(使用计时器调用了 10 次)即使计时器处理程序本身只有 1 秒长,也会发生错误?

【问题讨论】:

    标签: javascript timeout


    【解决方案1】:

    Nicholas C. Zakas 的以下文章讨论了不同浏览器如何以及何时中断长时间运行的 JavaScript 代码:

    将长处理代码分成小块并使用计时器启动它们实际上是解决此问题的一种方法。以下 Stack Overflow 帖子建议了一种解决此问题的方法:

    另一方面,web workers 更适合长时间运行的处理,因为它们的执行发生在单独的进程中,因此不会阻塞 UI 线程:

    但是,Internet Explorer 尚不支持网络工作者,他们将无法访问 DOM。

    【讨论】:

      【解决方案2】:

      事件处理程序被认为是一个新的执行上下文 - 时间限制被重置。

      如果您需要进行更多计算,请查看 WebWorkers。

      【讨论】:

        【解决方案3】:

        我也陷入了这种 JS 错误。我也得到了解决方案,不幸的是仅适用于 IE,它告诉编辑注册表(regedit 命令)并更新允许的 JS 命令的数量。在此处阅读更多信息http://support.microsoft.com/?kbid=175500

        但这对我来说似乎不是一个好的解决方案,因为如果你正在开发一个 Web 应用程序,你不能要求每个用户只使用 IE 并更新他的系统注册表。

        作为一种解决方法:如果您要在客户端处理的数据非常大,那么您可以在修复一组事件处理之间设置一些手动延迟。例如。如果您要处理任何任务的 100 个事件,那么您可以将它们分成 10 组,每组 100 个,并在 100 毫秒内处理每个事件。要知道如何做到这一点,请点击以下链接:

        http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/

        【讨论】:

        • OP 并没有真正要求“解决方案”,只是想知道是什么决定了每个浏览器中的这种行为。
        猜你喜欢
        • 2010-11-18
        • 2018-11-08
        • 2021-04-13
        • 1970-01-01
        • 1970-01-01
        • 2016-05-22
        • 2019-03-25
        • 2017-12-28
        • 1970-01-01
        相关资源
        最近更新 更多