我正在使用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吗?

帮助我理解为什么将它们称为“慢速”缓冲区。

最佳答案

如果您要阅读这些帖子:

  • https://groups.google.com/forum/?fromgroups=#!topic/nodejs-dev/jd52ZsVSZNo
  • https://groups.google.com/forum/?fromgroups=#!topic/nodejs/s1dnFbb-Rj8

  • 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/

    10-10 06:24