使用node.js异步完成任务列表的最快方法是什么?

时间:2014-08-12 23:22:19

标签: node.js asynchronous

我有一系列fs.writeFile png作业,png标题已经被删除了

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

像这样的作业数组

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

我刚刚开始使用异步并且正在查看他们的文档并且有很多方法

队列看起来很有趣并且很平行..

现在我处理我的工作(在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

使用此模块可以更有效/更快地完成吗?

1 个答案:

答案 0 :(得分:1)

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个磁盘,尝试更多磁盘效率不高。