我正在使用node.js来提供一些PNG图像,这些图像作为二进制BLOB存储在SQLite数据库中。这些图像很小,平均为9500字节。
我正在使用the sqlite3 npm package,它似乎将二进制BLOB对象作为 SlowBuffers
返回。我的node.js服务将这些SlowBuffers
保留在内存中以减轻IO延迟,如下所示:
response.send(slowBuffer);
看来
SlowBuffer
具有类似于Buffer
的接口(interface);转换为Buffer
很简单:var f = function(slowBuffer) {
var buffer = new Buffer(slowBuffer.length);
slowBuffer.copy(buffer);
return buffer;
}
我应该将这些
SlowBuffers
转换为Buffers
吗? 帮助我理解为什么将它们称为“慢速”缓冲区。
最佳答案
如果您要阅读这些帖子:
Node 提供两种类型的缓冲区对象。
Buffer
是 native Javascript数据结构; SlowBuffer
由C++模块实现。从 native Javascript环境使用C++模块会花费额外的CPU时间,因此“速度很慢”。 Buffer
对象由SlowBuffer
对象支持,但是可以直接从Javascript读取/写入内容,以获得更好的性能。任何大于8 KB的
Buffer
对象都由单个SlowBuffer
对象支持。单个Buffer
对象可以支持多个小于8 KB的SlowBuffer
对象。当内存中存在许多小于8 KB的Buffer
对象(由单个SlowBuffer
支持)时,如果您要为每个对象都使用SlowBuffer
,则C++模块的代价可能会非常高。小Buffers
通常被大量使用。This class is primarily for internal use
表示,如果您要自己管理服务器上的缓冲区,请使用SlowBuffer
(要在较小的块中使用,必须自己对SlowBuffer
进行分区)。除非您希望在处理缓冲区时进行微调,否则最好使用Buffer
对象。关于performance - 是什么使node.js SlowBuffers "slow"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14009048/