正确使用node.js中的_writev

man*_*nth 5 node.js node-streams

_writev()node.js中的正确用法是什么?该文件说:

如果流实现能够一次处理多个数据块,writable._writev()则应实现该方法。

它还说:

其主要目的writable.cork()是避免这样的情况:将许多小数据块写入流不会在内部缓冲区中造成备份,而这将对性能产生不利影响。在这种情况下,实现该writable._writev()方法的实现可以以更优化的方式执行缓冲的写入。

从流实现的角度来看,这是可以的。但从可写流消费者的角度来看,write或被writev调用的唯一方法是通过Writable.write()writable.cork()

我想看一个小例子,它描述了实现的实际用例 _writev()

got*_*itz 6

一个writev方法可以添加到实例,除了write,如果流包含若干块该方法将有所回升,而不是write。例如 Elasticsearch 允许你批量插入记录;因此,如果您正在创建一个 Writable 流来包装 Elasticsearch,那么让一个writev方法执行单个批量插入而不是多个单独的插入是有意义的,它的效率要高得多。例如,对于 MongoDB 等也是如此。

这篇文章(不是我的)展示了一个 Elasticsearch 实现https://medium.com/@mark.birbeck/using-writev-to-create-a-fast-writable-stream-for-elasticsearch-ac69bd010802