Performance 是什么让node.js变慢;慢;?
我使用它来提供一些PNG图像,这些图像作为二进制blob存储在SQLite数据库中。这些图像很小,平均9500字节 我正在使用,它似乎返回二进制BLOB对象。My node.js服务将这些Performance 是什么让node.js变慢;慢;?,performance,node.js,buffer,Performance,Node.js,Buffer,我使用它来提供一些PNG图像,这些图像作为二进制blob存储在SQLite数据库中。这些图像很小,平均9500字节 我正在使用,它似乎返回二进制BLOB对象。My node.js服务将这些SlowBuffers保存在内存中,以减轻IO延迟,服务方式如下: response.send(slowBuffer); 似乎SlowBuffer有一个类似于Buffer的接口;转换到缓冲区非常简单: var f = function(slowBuffer) { var buffer = new Buff
SlowBuffers
保存在内存中,以减轻IO延迟,服务方式如下:
response.send(slowBuffer);
似乎SlowBuffer
有一个类似于Buffer
的接口;转换到缓冲区
非常简单:
var f = function(slowBuffer) {
var buffer = new Buffer(slowBuffer.length);
slowBuffer.copy(buffer);
return buffer;
}
我是否应该将这些慢缓冲区
转换为缓冲区
?
请帮助我理解为什么它们被称为“慢”缓冲区。如果您阅读以下文章: 节点提供两种类型的缓冲区对象
Buffer
是一种原生Javascript数据结构<代码> SlowBuffer <代码>是由C++模块实现的。使用来自本地JavaScript环境的C++模块会耗费额外的CPU时间,因此“慢”。code>Buffer对象由SlowBuffer
对象支持,但是可以直接从Javascript读取/写入内容以获得更好的性能
任何大于8KB的Buffer
对象都由单个SlowBuffer
对象支持。一个SlowBuffer
对象可以支持多个小于8KB的Buffer
对象。当内存中存在许多小于8 kb的对象<代码>缓冲区< /COD>(由单个<代码> SlowBuffer < /COD>)时,如果每个模块使用“<代码> SlowBuffer < /代码>”,则C++模块的惩罚可能非常高。小的缓冲区
经常大量使用
这意味着,如果您想自己管理服务器上的缓冲区,则使用
SlowBuffer
(要在较小的块中使用,您必须自己分区SlowBuffer
)。除非您希望在处理缓冲区时使用分钟级别控制,否则您应该可以使用Buffer
对象。如果Buffer
中的数据只是在使用SlowBuffer
,那么为什么会有差异?是否有预分配<代码> SlowBuffer < /代码> s?都是内存分配,但是缓冲区使用本机JS函数来操作内存,而慢缓冲区使用外部C++ API。在调用No.j.cS.C++代码>缓冲区< /代码>时,当内存需要超过8K时,只使用<代码> SlowBuffer <代码>,这是一个开销。这与“每个缓冲区实际上都由SlowBuffer支持”相冲突,这是我感到困惑的地方。我的意思是当缓冲区的数量(大小小于8KB)很大时(这是非常常见的)。“处理它是不可行的”,我的意思是说性能会变慢,这取决于您使用了多少缓冲区。如果您的服务器处理大量缓冲区,则会造成伤害。缓冲区可以有任何大小。若缓冲区小于8KB,则由SlowBuffer支持,并且不使用外部API。我正在考虑小于8KB的缓冲区。我要换那一行。