美文网首页
Node大内存应用

Node大内存应用

作者: 前端精髓 | 来源:发表于2019-06-13 07:46 被阅读0次

在Node中,不可避免地还是会存在操作大文件的场景。由于Node的内存限制,操作大文件也需要小心,好在Node提供了 stream 模块用于处理大文件。

stream 模块是Node的原生模块,直接引用即可。 stream 继承自 EventEmitter ,具备基本的自定义事件功能,同时抽象出标准的事件和方法。它分可读和可写两种。Node中的大多数模块都有 stream 的应用,比如 fscreateReadStream()createWriteStream()方法可以分别用于创建文件的可读流和可写流, process 模块中的 stdinstdout 则分别是可读流和可写流的示例。

由于V8的内存限制,我们无法通过 fs.readFile()fs.writeFile() 直接进行大文件的操作,而改用 fs.createReadStream()fs.createWriteStream() 方法通过流的方式实现对大文件的操作。下面的代码展示了如何读取一个文件,然后将数据写入到另一个文件的过程:

let reader = fs.createReadStream('in.txt');
let writer = fs.createWriteStream('out.txt');
reader.on('data', function (chunk) {
  writer.write(chunk);
});
reader.on('end', function () {
  writer.end();
});

由于读写模型固定,上述方法有更简洁的方式,具体如下所示:

let reader = fs.createReadStream('in.txt');
let writer = fs.createWriteStream('out.txt');
reader.pipe(writer);

可读流提供了管道方法 pipe() ,封装了 data 事件和写入操作。通过流的方式,上述代码不会受到V8内存限制的影响,有效地提高了程序的健壮性。如果不需要进行字符串层面的操作,则不需要借助V8来处理,可以尝试进行纯粹的Buffer操作,这不会受到V8堆内存的限制。但是这种大片使用内存的情况依然要小心,即使V8不限制堆内存的大小,物理内存依然有限制。

相关文章

  • Node大内存应用

    在Node中,不可避免地还是会存在操作大文件的场景。由于Node的内存限制,操作大文件也需要小心,好在Node提供...

  • 理解 Node.js 的 GC 机制

    《深入浅出Node.js》第五章《内存控制》阅读笔记 随着 Node 的发展,JavaScript 的应用场景早已...

  • NodeJS中被忽略的内存

    原文链接:BlueSun | NodeJS中被忽略的内存 如朴灵说过,Node对内存泄露十分敏感,一旦线上应用有成...

  • [Node] 内存溢出与 old-space 大小调整

    1. 内存溢出 V8 为 Node.js 应用,默认只会分配了大概 1400 MB(仅本地测试的结果) 的内存空间...

  • Node玩转多进程

    Node带来的优势与需要解决的地方 Node的优势,擅长处理IO密集型应用,不要关心多线程带来的开辟内存的开销及上...

  • node内存泄露问题

    node对内存泄露十分敏感,这个不同于浏览器,一旦内存堆积,垃圾回收无法释放,会耗费大量时间进行对象扫描,应用会变...

  • 如何用 OneAPM 优化你的 Node.js 应用?

    本文主要讲解如何使用 OneAPM 提供的信息从内存、CPU 使用、响应速度等方面优化 Node.js 应用。适用...

  • Node.js内存管理机制分享

    Node.js内存管理Node.js的一些选项GC研究例子生产环境的设置 1. Node.js如何管理内存 [解惑...

  • Android避免OOM之使用软引用

    在Android应用的开发中,为了防止内存溢出,在处理一些占用内存大而且声明周期较长的对象时候,可以尽量应用软引用...

  • node var

    node中var才会分配内存,单独变量接收不会新分配内存

网友评论

      本文标题:Node大内存应用

      本文链接:https://www.haomeiwen.com/subject/gvgdfctx.html