用node.jsasynchronous完成任务列表的最快方法是什么?

我有一个fs.writeFile png作业的数组已经被删除像这样

canvas.toDataURL().replace(/^data:image\/\w+;base64,/,"") 

这样的作业数组

 jobs=[['location0/file0'],['location1/file1'],['location2/file2'],['location3/file3']]; 

我刚开始使用asynchronous,正在看他们的文档,有很多方法

队列看起来有趣和平行..

现在我像这样处理我的工作(在一个async.waterfall)

  function(callback){//part of waterfall (function fswritefile(){ if(jobs.length!==0){ var job=jobs.shift(); fs.writeFile(job[0],(new Buffer(job[1],'base64')),function(e){if(e){console.log(e);}else{fswritefile();}}) } else{callback();} })(); },//end of waterfall part 

使用这个模块可以更有效率吗?

async.waterfall将按顺序处理作业。 我认为你可以和async.each同时做所有事情:

 async.each(jobs, function (job, done) { var data = new Buffer(job[1],'base64'); fs.writeFile(job[0], data, done); }, function (err) { // … }); 

所有的工作都会同时开始。 但是,node.js始终将磁盘上的并发操作数限制为4。

编辑 :无论你做什么,node.js将限制在FS上的并发操作的数量。 主要原因是你只有1个磁盘,而且尝试更多的时候效率不高。