我正在使用NodeJs,需要调用一个无限函数,但我不知道什么才是最佳性能。
递归函数
function test(){
//my code
test();
}setInterval
setInterval(function(){
//my code
},60);setTimeout
function test(){
//my code
setTimeout(test,60);
}我希望在不崩溃服务器的情况下获得最好的性能。我的代码有几个算术运算。
感谢任何优化javascript性能的建议。
发布于 2014-10-14 20:53:41
小心..。第一段代码将阻止JavaScript事件循环。
基本上,在JS中,类似于应该处理的函数列表。当您调用setTimeout、setInterval或process.nextTick时,您将将给定的函数添加到这个列表中,当合适的时候,它将被处理。
在第一种情况下,您的代码将永远不会停止,因此它不会让事件列表中的其他函数被处理。
第二和第三种情况是好的。只有一个小小的不同。
如果您的函数需要处理,例如10 be和间隔将是您的60 be。
因此,区别在于你函数的启动之间的延迟,在一些基于时间间隔的系统中,比如游戏、拍卖、股票市场,这是很重要的。等等。
祝你的递归好运:-)
发布于 2014-06-20 06:10:44
如前所述,无休止的递归函数会导致堆栈溢出。时间触发的回调将在一个具有清晰堆栈的上下文中执行。
setInterval对于递归setTimeout上更精确的周期性调用非常有用,但是有一个缺点:即使抛出了一个未提及的异常,也会触发回调。这通常每60毫秒产生几个字节长的日志条目,每天1‘440’个条目。此外,重负载的setInterval回调最终可能会出现响应迟钝的脚本,甚至是空洞系统。
如果没有捕获任何异常,则在从函数返回之前立即执行递归setTimeout。它将保证从回调函数返回后的其他任务的时间框架,而不依赖于该函数的执行时间。
发布于 2014-06-13 15:17:40
不确定你想要完成什么,但这里有一种使用递归的“安全”方法.https://stackoverflow.com/questions/24208676/how-to-use-recursion-in-javascript/24208677
/*
this will obviously crash... and all recursion is at risk of running out of call stack and breaking your page...
function recursion(c){
c = c || 0;
console.log(c++);
recursion(c);
}
recursion();
*/
// add a setTimeout to reset the call stack and it will run "forever" without breaking your page!
// use chrome's heap snapshot tool to prove it to yourself. :)
function recursion(c){
setTimeout(function(c){
c = c || 0;
console.log(c++);
recursion(c);
},0,c);
}
recursion();
// another approach is to use event handlers, but that ultimately uses more code and more resourceshttps://stackoverflow.com/questions/23178015
复制相似问题