📅  最后修改于: 2023-12-03 15:03:15.481000             🧑  作者: Mango
在 Node.js 中,可以通过 Stream 构建各种可读、可写流,它们是处理流数据的重要基础。在可读流中,readable.readableHighWaterMark 属性是一个非常重要的配置项,本文就来详细介绍一下它的作用和用法。
在可读流中,高水位标记是指一个阈值,当已经被读取的数据大小达到该阈值时,流会触发 readable 事件,通知消费者可以再次读取数据。详细来说,如果可读流的缓存数据大小达到了高水位标记,那么消费者就需要尽快读取数据,否则可读流会停止读取数据,等待缓存中的数据被处理掉,以避免缓存过大导致内存占用过多。
因此,设置合适的高水位标记对于可读流的性能和内存使用是非常重要的。
要设置可读流的高水位标记,我们需要在创建可读流的时候传入配置对象,并在该对象中设置 highWaterMark 属性,其值为期望的高水位标记值,例如:
const stream = require('stream');
const fs = require('fs');
const readable = fs.createReadStream('/path/to/file', {
highWaterMark: 1024 // 设置高水位标记为 1KB
});
在上面的代码中,我们使用 fs.createReadStream 创建了一个可读流,并将 highWaterMark 属性设置为 1024,即 1KB。这意味着消费者需要尽快读取数据,以免缓存中的数据过多占用内存。
在 Node.js 中,可读流的 highWaterMark 默认值是 16KB,这意味着第一次读取数据时会读取 16KB 的数据,并且当缓存中数据大小超过了 16KB 时,就会触发 readable 事件通知消费者需要尽快读取数据。
如果我们使用大型文件或者网络流作为数据源,那么默认的高水位标记可能会导致内存占用过多,此时我们就需要将 highWaterMark 属性设置为合适的值来避免这种情况的发生。
readable.readableHighWaterMark 属性是可读流中的一个重要配置项,适当设置该属性可以有效提高可读流的性能,避免内存占用过多问题的发生。合理设置 highWaterMark 属性需要结合实际情况,考虑数据源的特点、消费者的处理能力等因素。