这节课讲一下 Stream 和 Buffers,在讲 Stream 和 Buffers 之前让我告诉你一个'真实故事':

一男住在森林里,有一天这男遇到了巨大的 Node.js 糖山,他决定要将这巨大的糖山搬回家给孩子吃。这男的十分强壮,但他知道如果要一次将整座山拖回家,将要耗费他一生的时间,拖动的速度很慢而孩子们却十分着急。
他停下来想了一下,想到了一个如何简单快速运输糖山到家里的办法,然后开始建造一个从糖山到家里的自动步道
,他想如果使用锄头一块一块地削糖山然后装进纸箱里,倒进自动步道就可以一点一点地传回家里,这样是最好的,因为只要第一堆糖到家了,孩子们就可以开吃,而不用等待整个糖山搬回来。
这个故事实际上跟 Stream 和 Buffers 的工作原理有很多相似的地方。
Buffers

首先,什么是 Buffers,Buffers 是一小堆数据将要从一个地方转移到另一个地方的临时存放点,假如我们有大量数据需要从 A 位置传送到 B 位置,我们可以在 Buffer 里一次收集一小部分数据然后进行转移。

看起来像这样,我们有完整一份数据,你可以跟糖山的故事进行比较。
如图每次转移一小部分数据到 Buffer(数据临时收集点),而不是等所有数据都保存到内存中,当 Buffer 填满后,数据就会开始传递并进行处理。
Streams
我们已经知道什么是 Buffer 了,那什么是 Stream ? Stream 是数据流,数据会在数据流里从一个地方流动到另一个地方。

如图,我们有某些数据要传送给客户端,数据将会在 Stream 里流动,流到 Buffer 里,当 Buffer 填满数据后,将收集满的数据传递出来并处理然后返回到客户端。
你可能已经听说过流视频
,这就是 Stream 和 Buffers 的使用实例,我们不需要等到整部电影都加载完才能观赏电影。这就是使用 Stream 和 Buffers 的好处。
为什么我要告诉你这些,到底这跟 Node.js 有什么关系?Node.js 里可以创建流来读写文件,这种方式能为你的应用提高性能。同样的在 Node 的服务处理请求并响应给客户端的时候也可以这样使用。

下节课我们来开始动手写代码吧。
网友评论