我正在使用node.js来提供一些存储在SQLite数据库中的PNG图像作为二进制BLOB。这些图像很小,平均为9500字节。
我正在使用the sqlite3 npm package,它似乎将二进制BLOB对象返回为SlowBuffers
。我的node.js服务将这些SlowBuffers
保存在内存中以缓解IO延迟,为它们提供如下服务:
response.send(slowBuffer);
似乎SlowBuffer
的界面类似于Buffer
;转换为Buffer
是微不足道的:
var f = function(slowBuffer) {
var buffer = new Buffer(slowBuffer.length);
slowBuffer.copy(buffer);
return buffer;
}
我应该将这些SlowBuffers
转换为Buffers
吗?
帮助我理解为什么它们被称为“缓慢”缓冲区。
答案 0 :(得分:14)
如果您阅读帖子:
Node提供两种类型的缓冲区对象。 Buffer
是一个原生的Javascript数据结构; SlowBuffer
由C ++模块实现。使用本机Javascript环境中的C ++模块会花费额外的CPU时间,因此“慢”。 Buffer
个对象由SlowBuffer
个对象支持,但可以直接从Javascript读取/写入内容以获得更好的性能。
大于8 KB的任何Buffer
对象都由单个SlowBuffer
对象支持。小于8 KB的多个Buffer
对象可以由单个SlowBuffer
对象支持。当内存中存在多个小于8 KB的Buffer
个对象时(由单个SlowBuffer
支持),如果您要为每个SlowBuffer
使用Buffers
,则C ++模块的惩罚可能非常高。小SlowBuffer
经常被大量使用。
This class is primarily for internal use
表示如果您想自己管理服务器上的缓冲区,请使用SlowBuffer
(要在较小的块中使用,您必须自己对Buffer
进行分区)。除非您在处理缓冲区时需要那个微小的级别控制,否则使用{{1}}个对象应该没问题。