Javascript 为了避免出现“脚本运行时间过长”对话框,我应该拆分函数并每隔一段时间运行它吗?

Javascript 为了避免出现“脚本运行时间过长”对话框,我应该拆分函数并每隔一段时间运行它吗?,javascript,performance,internet-explorer,loops,Javascript,Performance,Internet Explorer,Loops,我的一个页面上运行了一个非常大的JavasScript for循环。 它太大了,在旧版本中会出现一个IE弹出窗口,上面写着:“这个页面的一个脚本使它运行缓慢,你想终止它吗?” 我相信我已经尽可能地优化了它,所以现在我正在寻找替代的方法 我想知道创建一个运行前100次迭代、第二次100次迭代、第三次迭代的时间间隔,直到所有迭代都完成,这对我是否有益?这会阻止IE弹出声明脚本运行太慢吗?Javascript是单线程的,所以这是主要障碍 如果您想执行大量计算,最好使用,但是这些仅由现代浏览器支持。这样

我的一个页面上运行了一个非常大的JavasScript for循环。 它太大了,在旧版本中会出现一个IE弹出窗口,上面写着:“这个页面的一个脚本使它运行缓慢,你想终止它吗?”

我相信我已经尽可能地优化了它,所以现在我正在寻找替代的方法


我想知道创建一个运行前100次迭代、第二次100次迭代、第三次迭代的时间间隔,直到所有迭代都完成,这对我是否有益?这会阻止IE弹出声明脚本运行太慢吗?

Javascript是单线程的,所以这是主要障碍

如果您想执行大量计算,最好使用,但是这些仅由现代浏览器支持。这样,您的计算不会减慢UI的速度,UI应该位于主线程中。这是构建桌面应用程序时的常见做法

如果您不介意计算时间过长,那么拆分计算可能是一个好主意。这应该可以防止弹出窗口出现,只要您选择正确的时间


您也许还应该重新考虑在客户端执行如此多计算的需要。

您可以使用以下方法:。它不是真正的多线程,只是在玩计时器。它将阻止弹出窗口。但是我不确定在这种情况下是否有必要,除非你正在制作一个完整的游戏。

如果你的代码没有足够快地将控制权返回到浏览器的主事件处理循环,那么脚本太长的浏览器弹出窗口就会出现

如您在问题中所建议的,使用setTimeout成批触发您的计算确实会阻止弹出窗口的出现


周期性地返回事件循环也将允许浏览器对其他UI事件保持响应——例如,您可以提供一个取消按钮。我建议您尝试每秒至少生成一次,如果不是更频繁的话。

Javascript是单线程的,因此运行某个东西需要花费同样长的时间,除非使用workers,否则如果拆分它,速度不会更快,但它可以使浏览器更具响应性,这样它在循环过程中不会挂起,但总的来说不会更快。你到底想做什么?通常你不应该做这么多的计算。谢谢,我想我没有用最好的方式表达我的问题。我更感兴趣的是在这一点上防止弹出窗口,而不是使JavaScript本身更快。你认为Adeneo提到的挂起是弹出的原因吗?循环是否递归地依赖于前面的每个循环?为了帮助您进行优化,我们确实需要查看循环。Marksyzm,循环不需要以任何特定顺序运行。它是从大量文本框中复制值并将其存储在数组中。只要循环遍历所有的文本框就可以了。这正是OP建议的问题中可能的解决方法。因为缺少代码,我无法将其编辑到帖子中。谢谢你的回复。我正在为一家仍在使用旧版IE的公司开发一个内部应用程序,所以我不能依赖员工。我很想在服务器端执行这些计算,但我受到被迫使用的软件的限制!我不介意代码花费的时间超过它应该花费的时间,所以也许我会将其拆分。再次感谢。您考虑过Java小程序吗?是的,它们很难看,但是如果你想执行大量的计算,至少可以在一个单独的线程中工作,并且可能得到旧版本IEs的支持。