Node.js Stream writable.writableHighWaterMark 属性

2025年2月12日 | 阅读 4 分钟

在本文中,我们将讨论 Node.js stream writable.writableHighWaterMark() 方法,包括其语法、参数和几个示例。

Node.js stream writable.writableHighWaterMark() 属性是什么?

它是 stream 模块的内部应用程序编程接口。"writable.writableHighWaterMark" 字段用于验证在 Writable 创建期间传递的 "highWaterMark" 值。

Node.js 可写流包含一个名为 writableHighWaterMark 属性的可配置选项。它确定了可写流内部缓冲区在开始反压之前可以容纳的最大字节数。当达到此限制时,流会暂时停止接受新输入,直到缓冲区大小减小。

语法

它具有以下语法:

返回值

如果设置了 highwatermark,则返回该值;如果未设置,则返回默认值。

writableHighWaterMark() 属性的属性

Node.js 中 writableHighWaterMark() 属性的几个属性如下:

  1. 反压和缓冲:在将数据写入底层资源(例如文件或网络套接字)之前,Node.js 的可写流会内部缓冲数据。当缓冲区达到由 writableHighWaterMark 设置的指定阈值时,Node.js 会应用反压,暂停流接收新数据,直到缓冲区大小减小。
  2. 高水位标记 (High-Water Mark):在应用反压之前,writableHighWaterMark 属性确定了可写流内部缓冲区可以存储的最大数据量(以字节为单位)。该大小可以根据程序的需求进行更改。默认情况下,它是 16 KB (16384 字节)。
  3. 自定义:在创建可写流时,开发人员可以自定义 writableHighWaterMark 值,以最大限度地提高内存效率和速度。较低的值可能会减少内存消耗,但可能导致更频繁的反压;而较高的值可以提高吞吐量,但也可能需要更多内存。
  4. 对性能的影响:理解 writableHighWaterMark 属性如何影响性能非常重要。将其设置得太低会导致频繁的反压,从而影响吞吐量;而将其设置得太高可能导致过多的内存使用,特别是在消费者速度较慢的情况下。
  5. 默认行为:为了获得最佳性能和高效的资源利用,评估每个应用程序的独特需求并修改默认的 writableHighWaterMark 值非常重要,即使它适用于许多使用场景。

示例 1

让我们通过一个示例来说明 Node.js stream Writable.writableHighWaterMark() 属性。

输出

 
Start writing the information...
Writing chunk of size 1024 bytes
Writing chunk of size 1024 bytes
Writing chunk of size 1024 bytes
Writing chunk of size 1024 bytes

说明

在此示例中,此代码演示了如何使用 stream 模块中的 Writable 类在 Node.js 中创建自定义可写流。为了控制反压,自定义流设置为 4096 字节 (4 KB) 的 writableHighWaterMark。接下来,使用 "_write" 函数管理数据写入,通过 setTimeout 引入 1 秒延迟来模拟反压。代码记录每次写入的块的大小。一个创建 1 KB 缓冲区并向自定义可写流写入十次的循环。通过在达到缓冲区限制时停止写入,此设置演示了高水位标记如何影响流的缓冲和流量管理。

示例 2

让我们通过另一个示例来说明 Node.js Stream Writable.writableHighWaterMark() 属性。

输出

 
Writable HighWaterMark Value is: 3574

说明

在此示例中,此 Node.js 代码导入了 stream 模块,并创建了一个具有自定义 highWaterMark 值 3574 字节的可写流实例。变量 highWaterMarkValue 存储了可写流的 writableHighWaterMark 属性的值,可以检索该值。最后,使用 console.log() 方法输出 writableHighWaterMark 的值。它演示了如何在 Node.js 中配置和获取可写流的高水位标记值。