我一直在查看node-dirty的代码,并注意到当将大量数据写入文件时,原始程序员已选择将写入数据集合到多个组中,并一次发出一组写入,但它们都是作为一个循环的一部分同时发布的,无需等待任何回调。我有三个问题。我有类似的问题要解决。
谢谢
答案 0 :(得分:2)
这在某种程度上更有效吗? 我也应该捆绑写作吗?
进行许多小写操作效率低下。发送写命令会附加开销。因此,只写5个字节而不是1000个更昂贵。
我应该如何选择最佳捆绑 尺寸?为什么不写一个小组?
对我来说,最佳尺寸听起来像黑色艺术。我认为有充分的理由不做一个大写。可能要早一点开始写。稍早开始一点效率稍高。
如果我注册了on('drain')事件 在写入流上,它是否会被发出 毕竟只有一次同时 发出的写入已经完成?或之后 每? (我的猜测是前者)
当写入队列中的所有内容都已完成写入时,会触发触发器。因此,只要您更快地附加到写入队列然后写入它,它应该只触发一次。你需要一个系统的地狱来拉动这样的边缘情况。
如果发出on('error'),将会 ('drain')事件也会发出? 或者他们是互相排斥的?
即使它被发射,在'drain'中进行错误处理也没有意义。如果发生错误,我将始终假设整个写入操作失败,并且不尝试恢复中间写入。
答案 1 :(得分:0)
For 4.如果发出on('error'),是否也会发出('drain')事件?或者他们是互相排斥的?
您担心它,因为您不想在应用程序中维护状态。所以,也许你可以使用便利功能:
function not_if(proc, veto_inner) {
var vetoed = false;
return {
proc: function() {
if (!vetoed) { return proc.apply(null, arguments); }
},
vetoer: function() {
if (!vetoed) {
vetoed = true;
veto_inner.apply(null, arguments);
}
};
}
现在,您可以将'error'处理程序设置为notoer,将'drain'处理程序设置为'proc',而不是在调用'error'后调用'drain'进行调用。