Nodejs服务器 – 通过使循环迭代asynchronous来提高性能

考虑下面的服务器端nodejs代码。 假设循环内的代码是primefaces的(代码应该被执行一次),并且迭代之间没有依赖关系。

for (var i=0; i<aVeryLargeValue; i++){ //do atomic complex calculations } 

有没有办法提高服务器的性能,将循环分成几部分,以便迭代是asynchronous执行的?

你的问题似乎是aVeryLargeValue导致服务器花费太长的时间处理这个循环,因此阻止其他请求。

使用async模块进行处理。 您可以使用while函数将循环分解成多个部分。

 var async = require('async'); var aVeryLargeValue=99999; var i=0; async.whilst( function() { return i < aVeryLargeValue; }, function(callback) { for(x=i;x<i+1000;x++) { //do something } i+=1000; callback(); }, function(err) { if(err) throw err; } ); 

如果这真的是CPU密集型的东西,那么你最好用一个subprocess来处理它。 上面的代码主要适用于需要处理大量请求的时间,这个请求可能需要几秒钟的时间,但是您不想在这几秒钟内搁置其余的请求。 如果你的处理将要花费几秒钟,那么你应该把它卸载到subprocess。

当然,您可以将循环分割为任意数量的部分,但总结执行时间会更糟糕,因为开销太大。

据我所知,没有办法在JavaScript中运行并行循环(分别为node.js)。