是什么让node.js SlowBuffers"慢"?

Jac*_*ble 9 performance buffer node.js

我正在使用node.js来提供一些存储在SQLite数据库中的PNG图像作为二进制BLOB.这些图像很小,平均为9500字节.

我正在使用sqlite3 npm包,它似乎返回二进制BLOB对象SlowBuffers.我的node.js服务将这些内容保存SlowBuffers在内存中以缓解IO延迟,为它们提供如下服务:

response.send(slowBuffer);
Run Code Online (Sandbox Code Playgroud)

它似乎SlowBuffer有一个类似的界面Buffer; 转换Buffer为微不足道的:

var f = function(slowBuffer) {
  var buffer = new Buffer(slowBuffer.length);
  slowBuffer.copy(buffer);
  return buffer;
}
Run Code Online (Sandbox Code Playgroud)

我应该把它们转换SlowBuffersBuffers

帮助我理解为什么它们被称为"缓慢"缓冲区.

use*_*109 14

如果您要阅读帖子:

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

Node提供两种类型的缓冲区对象.Buffer是一个原生的Javascript数据结构; SlowBuffer由C++模块实现.使用本机Javascript环境中的C++模块会花费额外的CPU时间,因此"慢".Buffer对象由SlowBuffer对象支持,但可以直接从Javascript读取/写入内容以获得更好的性能.

任何Buffer大于8 KB的SlowBuffer对象都由单个对象支持.Buffer小于8 KB的多个对象可以由单个SlowBuffer对象支持.当Buffer内存中存在多个小于8 KB的对象(由单个支持SlowBuffer)时,如果您要SlowBuffer为每个对象使用a,则C++模块可能会非常高.小Buffers的通常大量使用.

This class is primarily for internal use意味着如果您想自己管理服务器上的缓冲区,那么使用SlowBuffer(在较小的块中使用,您必须SlowBuffer自己进行分区).除非你想在处理缓冲区中进行那种微小的级别控制,否则使用Buffer对象应该没问题.