什么是Node.js的No-Buffering功能

时间:2017-03-04 13:25:56

标签: node.js buffer

无处不在,它提到Node.js没有缓冲功能。例如,从Tutorials Point:

  

无缓冲 - Node.js应用程序从不缓冲任何数据。这些应用程序只是以块的形式输出数据。

但它意味着什么? Node.js有一个Buffer类,并且根据Buffer类定义

  

纯JavaScript不能很好地处理直接二进制数据,尽管JavaScript是Unicode友好的。在处理TCP流以及读写文件系统时,有必要处理纯二进制数据流。

这是正确的。

那么," No Buffering"的特点是什么?在Node.js?

Node.js如何保持无缓冲?任何人都可以用一个例子来解释吗?

1 个答案:

答案 0 :(得分:2)

虽然Node.js允许您使用数据流(即分块数据),但这并不一定意味着" Node.js永远不会缓冲数据" - 这取决于开发人员处理。

通过创建一个回调来完成典型的流式传输,该回调在一段时间内接收数据,对该数据执行某些操作,或将其处理为另一个流。

这意味着数据的消费者可以更轻松地获取它,而无需等待整个操作完成。

这就是TutorialPoint所不知道的,虽然说得不好 - 而且大部分都不正确。

缓冲区实际上是使用可流式数据的关键。 从某种意义上说,实际数据将驻留在缓冲区中,直到您的回调将数据从流中拉出来进行处理。

这就是为什么Node.JS有缓冲类和库,例如 stream-buffers ,以方便流数据访问。

处理溪流的常见痛点缓冲区称为:" Back Pressure"

当您拥有生产者消费者的数据流时,但由于加载问题,您的消费者在快速消费数据方面落后了与生产者将数据输入流中的速度相比,其速度足够快。

这导致了所谓的"背压"效果,并且如果生产者不受费率限制,可以关闭系统。

背压与讨论相关,因为它是由缓冲区填充速度快于回调可以将数据推送回用户或其他流而引起的。

因此,缓冲区 - 在某种程度上 - 对于Node.js 的操作至关重要,它是如何处理连续数据流的。 这就是Buffer class存在的原因,以及Streaming缓冲区 - 促进回调之间的数据移动。