大循环挂起javascript引擎

问题描述 投票:0回答:2

最近,当我解决算法问题时,我发现了一个像这样的普通大循环

var x = 1000000000000;
for (var i = 0; i <= x; i++) {}

可以挂起javascript引擎(在node.js,Chrome和Firefox javascript控制台上测试)。

实际上它正在运行,但速度很慢。我试了x的几个值,当x = 1000000时有明显的延迟。

这种表现是否与翻译语言一致?

javascript node.js google-chrome firefox for-loop
2个回答
2
投票

您可以使用某种形式的loop unrolling,将循环分解成块,例如使用Duffs device,或使用描述here的机制。

行为不仅限于解释型语言。循环将持续很长很长时间。试试c#中的for (long n = 1000000000000; n >= 0; n-=1) {}

最后,在使用web workers的(现代)浏览器中可能是可行的。这是我为另一个SO问题创建的an example


2
投票

任何语言都会很慢。在这种情况下,它尤其引人注目,因为它阻止了你的UI。 JavaScript引擎执行单线程事件循环。您可以随时在use web workers中执行后台处理缓慢的任务。

© www.soinside.com 2019 - 2024. All rights reserved.