Nodejs服务器 - 通过使循环迭代异步来提高性能

时间:2014-11-05 07:41:50

标签: javascript node.js

考虑以下服务器端nodejs代码。假设循环内部的代码是原子的(代码应该执行一次)并且迭代之间没有依赖...

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

有没有办法通过将循环划分为多个部分来提高服务器性能,以便异步执行迭代?

2 个答案:

答案 0 :(得分:2)

您的问题似乎是aVeryLargeValue导致服务器处理此循环花费太长时间,从而阻止了其他请求。

使用async模块处理此问题。您可以使用whilst函数将循环分解为多个部分。

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密集型的东西,那么最好使用子进程来处理它。上面的代码主要适用于需要处理大量请求的时间,这可能需要几秒钟,但您不想在几秒钟内保留其余的请求。如果您的处理时间超过几秒钟,那么您应将其卸载到子进程。

答案 1 :(得分:1)

当然,您可以根据需要将循环拆分为多个部分,但由于开销,摘要执行时间会更糟。

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