9

node.jsを使用して、バイナリ BLOB として SQLite データベースに保存されている PNG 画像を提供しています。これらのイメージは小さく、平均 9500 バイトです。

私はsqlite3 npm packageを使用しています。これは、バイナリ BLOB オブジェクトをSlowBuffers. 私の node.js サービスはSlowBuffers、IO レイテンシを軽減するためにこれらをメモリに保持し、次のように提供します。

response.send(slowBuffer);

SlowBuffer似たインターフェースを持っているようBufferです。への変換Bufferは簡単です:

var f = function(slowBuffer) {
  var buffer = new Buffer(slowBuffer.length);
  slowBuffer.copy(buffer);
  return buffer;
}

SlowBuffersこれらをに変換する必要がありBuffersますか?

それらが「遅い」バッファと呼ばれる理由を理解してください。

4

1 に答える 1

14

あなたが投稿を読むなら:

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

ノードは2種類のバッファオブジェクトを提供します。BufferネイティブのJavascriptデータ構造です。SlowBufferC++モジュールによって実装されます。ネイティブJavascript環境からC++モジュールを使用すると、余分なCPU時間がかかるため、「低速」になります。Bufferオブジェクトはオブジェクトに支えられていSlowBufferますが、パフォーマンスを向上させるために、コンテンツをJavascriptから直接読み書きできます。

8 KBBufferを超えるオブジェクトは、単一のSlowBufferオブジェクトによってサポートされます。Buffer8 KB未満の複数のオブジェクトは、単一のSlowBufferオブジェクトでバックアップできます。Buffer8 KB未満のオブジェクトがメモリ内に多数存在する場合(単一のオブジェクトに裏打ちされている場合)、代わりにオブジェクトごとSlowBufferにを使用すると、C++モジュールのペナルティが非常に高くなる可能性があります。SlowBuffer少量Buffersが大量に使用されることがよくあります。

This class is primarily for internal useつまり、サーバー上のバッファーを自分で管理する場合は、を使用SlowBufferします(小さなチャンクで使用するには、SlowBuffer自分でパーティションを作成する必要があります)。バッファの処理でその微細なレベルの制御が必要でない限り、Bufferオブジェクトの使用には問題がないはずです。

于 2013-02-13T04:08:10.360 に答える