我知道ie和firefox都有javascript执行限制(Source 1,Source 2)。根据执行的语句数量,我听说它在IE中的某个地方是500万,基于firefox中的秒数:默认情况下我的版本是10秒。
我没有得到的是案例将超越这些限制:
我确定一个巨大的循环将超过执行时间的限制
但是一个事件处理者会超过限制,如果它本身的执行时间低于限制但是如果它多次出现?
示例:
假设我的页面上有一个计时器,每20秒执行一次javascript。计时器处理程序的执行时间为1秒。 firefox和ie分别处理定时器函数的每个调用,所以它永远不会超过限制,或者是firefox /即加起来每个调用的时间所以在处理程序完成后,所以在我的网站上200秒后(与调用10次的定时器即使定时器处理程序本身只有1秒长,也会发生错误?
答案 0 :(得分:8)
Nicholas C. Zakas的以下文章讨论了不同浏览器如何以及何时中断长时间运行的JavaScript代码:
将长处理代码分解成小块并使用定时器启动它实际上是解决此问题的一种方法。以下Stack Overflow帖子提出了解决此问题的方法:
另一方面,web workers更适合长时间运行的处理,因为它们的执行发生在一个单独的进程中,因此不会阻止UI线程:
但是,Internet Explorer中不支持Web工作者,并且他们无法访问DOM。
答案 1 :(得分:1)
事件处理程序被视为新的执行上下文 - 时间限制已重置。
如果您需要进行更多计算,请查看WebWorkers。
答案 2 :(得分:0)
我也陷入了这种JS错误。我也得到了解决方案,不幸的是只有IE,它告诉编辑注册表(regedit命令)并更新允许的JS命令的数量。在这里阅读更多http://support.microsoft.com/?kbid=175500。
但是这对我来说似乎不是一个很好的解决方案bcoz如果你正在开发一个web应用程序,你不能要求每个用户只使用IE并更新他的系统注册表。
作为一种解决方法:如果您在客户端处理的数据非常大,那么您可以在修复事件集处理之间设置一些手动延迟。对于前者如果您要处理任何任务的事件有100个,那么您可以将它们分成10组100个并按100毫秒处理它们中的每一个。要知道如何操作,请按照以下链接:
http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/