【发布时间】:2013-03-10 00:10:58
【问题描述】:
我在 Javascript 中做了很多递归,为了防止堆栈溢出,我一直在使用 setTimeout。这是一个简单的理论示例:
go(){
setTimeout(function(){
x++;
go();
},1);
}
我还有一个功能,每隔几秒就将x 记录到控制台,但这不是问题。我所看到的是,无论我为超时输入什么值,我在示例中使用了 1,脚本每秒只能运行 1000 次。我正在做数亿级别的递归,所以这还不够快。当我将超时值设置为 0、0.1 或 1/10 时,我仍然每秒只能获得大约 1000 次。我尝试使用 32 位和 64 位浏览器(Chrome 和 Firefox)无济于事。
我怎样才能将速度提高一个档次?另外,我对这一切都比较陌生,所以如果解决方案是一个简单的解决方案,那就太棒了。
哦,忘了说:如果我完全删除 setTimeout,我每次都会溢出堆栈。
感谢您的帮助!
【问题讨论】:
-
我想知道您为什么要在客户端浏览器上进行如此繁重的操作。如果您能找到一种在您的服务器上运行它的方法,那就更好了。
-
我不确定我是否理解;如果您使用 setTimeout 来防止堆栈溢出,那么您一定不需要递归。那么为什么需要 setTimeout 呢?递归变慢只会延迟溢出。
-
你所做的似乎不对
-
setTimeout 有一个最小超时时间,但如果你的目标是新浏览器,你可以使用 window.postMessage 尽可能快地完成同样的事情。我认为 MDN 有一个例子。 (现在无法在移动设备上发布真正的答案。)
-
也可以使用自定义事件来执行此操作,包括在旧浏览器上,但我没有尝试过。
标签: javascript settimeout