process.stdin流的可读事件和数据事件有什么区别
What are the differences between readable and data event of process.stdin stream?
说我有
process.stdin.setEncoding('utf8');
var myString = '';
之间有什么区别
process.stdin.on('readable', function() {
myString += process.stdin.read();
});
和
process.stdin.on('data', function(chunk) {
myString += chunk;
});
一旦stdin是结束,如果输入字符串相同,他们就会给我相同的myString
每种方法的最佳实践是什么?感谢
它们是两个不同的API,允许您访问相同的数据块流。'readable'
API是作为"Streams 2"的一部分在Node 0.10.0中引入的,因此如果您搜索它,它应该会有所帮助。问题的核心是'readable'
接口允许更简单的数据管理和缓冲。
'data'
示例使用chunk调用函数,您别无选择,只能处理它,否则它将永远丢失。在'readable'
示例中,函数告诉数据是可用的,但您可以随时读取它。这允许底层系统知道您是否已经处理过数据,因此支持一个名为背压的概念非常简单。
例如,在网络流中,如果客户端通过TCP连接向服务器发送数据,而服务器太忙,它将接收readable
事件,但它可以选择等待读取数据,直到它真正拥有处理数据的资源。通过不读取数据,流将对其进行缓冲,当缓冲区接近最大大小时,流将停止从操作系统读取数据包,以避免占用太多RAM。然后操作系统将开始丢弃数据包,由于数据包被丢弃,发送数据的客户端将降低发送数据的速度,以减少丢弃的数据包。
这在技术上都得到了旧流"V1"实现的支持,但要做到这一点要困难得多
因此,基本上,如果你期望大量数据,使用"可读"或将流设计为管道传输是一个非常好的主意,但如果你只是从终端读取数据,那么你很可能会看到零差异。
相关文章:
- 当使用“”时,事件数据在jquery中返回空对象;on()”;
- 如何更新angular2中组件之间的事件数据
- 不;t使用ajax在fullcalender.js中加载事件数据
- jQuery触发器触发点击事件,但不发送事件数据
- 在addListener中传递google事件数据
- 如何获取整个 JavaScript 范围内上次单击的事件数据
- 动画步骤和事件数据
- 为什么此 Google 日历 API 请求不返回开始时间等事件数据
- ui5 SplitContainer 不会将事件数据传递给子元素中的 onBeforeShow
- 如何动态打印 JQuery 移动点击事件数据
- 加载从跨文档消息传递中作为事件数据获得的 pdf
- WoopraTracker 未在自定义事件数据中定义
- 如何处理来自 websocket 的消息事件数据
- 如何将多个事件数据组合为一个适合与fullcalendar一起使用的对象或变量
- Ace编辑器-如何传递事件数据
- 谷歌可视化图表在选择事件数据时发出警报
- 如何将事件数据和id传递给javascript函数
- 使用jQuery将事件数据传递给回调函数
- 如何在两个模块之间传递事件数据
- 正在尝试将事件数据传递给函数