【问题标题】:node.js fs write files in bluknode.js fs 批量写入文件
【发布时间】:2018-11-08 01:01:16
【问题描述】:

在 node.js 中,我有一个名为 jobs 的数组,我将文件位置和图像推送到该数组。这种情况每 13 秒发生 112 次(每个图像/位置都是唯一的)

   jobs.push(['/home/user/public_html/img/'+filename+'.png',canvas[n].toDataURL().replace(/^data:image\/\w+;base64,/,"")]);

然后我遍历所有作业并使用 fs 写入文件

for(var job=0;job<jobs.length;job++){
    fs.writeFile(jobs[job][0],(new Buffer(jobs[job][1],'base64')));
    }

我的问题是;文件写入循环可以更快完成吗?

这样,文件一个接一个地写入。我认为最好同时完成所有这些操作因为这作为服务器作业每 13 秒仅发生一次

多个 fs 实例有帮助吗?

var fs1=require('fs');
var fs2=require('fs');
var fs3=require('fs');

还是网络工作者? (我在节点中不知道这个)

【问题讨论】:

  • 节点是异步的。您的循环甚至不等待文件被写入。
  • 我在没有回调的情况下读取 fs.writeFile 将导致在完成之前不会执行任何代码!?
  • 看看这里,似乎同样的问题stackoverflow.com/questions/24705002/…
  • 好的,感谢@Mritunjay 为 Array.forEach 和 SLaks 强调了我的误解,但我的问题是如何通过一次完成所有这些来加快批量文件的写入速度? child_processes 看起来很有趣!? fs 一次只能关注一个文件似乎有点弱!

标签: node.js fs


【解决方案1】:

Node 使用 Worker Pool 来处理“昂贵”的任务。这包括操作系统不提供非阻塞版本的 I/O,以及 CPU 密集型任务。

这些是使用此工作池的 Node 模块 API:

I/O 密集型 DNS:dns.lookup()、dns.lookupService()。 文件系统:除了 fs.FSWatcher() 和显式同步的所有文件系统 API 都使用 libuv 的线程池。

©https://nodejs.org/en/docs/guides/dont-block-the-event-loop/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多