在node.js中正确使用_writev

时间:2016-12-26 16:04:47

标签: node.js node-streams

node.js中<div kendo-grid="minorCategoriesGrid" k-options="vm.gridOptions"> </div> 的正确用法是什么? 文档说:

  

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

它还说:

  

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

从流实现的角度来看,这没关系。但从可写流消费者的角度来看,调用writable._writev()write的唯一方法是writevWritable.write()

我想看一个小例子来描述实施writable.cork()的实际用例

2 个答案:

答案 0 :(得分:2)

除了writev之外,还可以将write方法添加到实例,并且如果流包含多个块,则将选择该方法而不是write。例如,Elasticsearch允许您批量插入记录;因此,如果您要创建一个可包装的流来包装Elasticsearch,那么有一个writev方法执行单个批量插入而不是几个单独的插入是很有意义的,它的效率要高得多。例如,对于MongoDB等也是如此。

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

答案 1 :(得分:0)

使用_writev()时会调用uncork()。节点文档中有一个简单的例子。

stream.cork();
stream.write('some ');
stream.write('data ');
process.nextTick(() => stream.uncork());

更多详情,

https://nodejs.org/api/stream.html#stream_writable_uncork https://github.com/nodejs/node/blob/master/lib/_stream_writable.js#L257