Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 是什么让node.js变慢;慢;?_Performance_Node.js_Buffer - Fatal编程技术网

Performance 是什么让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

我使用它来提供一些PNG图像,这些图像作为二进制blob存储在SQLite数据库中。这些图像很小,平均9500字节

我正在使用,它似乎返回二进制BLOB对象。My node.js服务将这些
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的缓冲区。我要换那一行。