JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

Node.jsのWritableストリームで使うcork()メソッドとuncork()メソッドの使い方を解説

Node.jsのwritable.cork()メソッドは、書き込まれたすべてのデータを強制的にメモリ内にバッファリングするための機能です。バッファリングされたデータは、stream.uncork()またはstream.end()メソッドが呼び出されるまで、バッファメモリ内に保持され続けます。

この仕組みにより、複数回に分けて行われる書き込み処理をまとめて一括送信できるため、ネットワーク通信などで小さなデータを頻繁に書き込む場合のパフォーマンス向上に役立ちます。

構文

cork()

writeable.cork()

uncork()

writeable.uncork()

パラメータ

このメソッドは書き込まれたデータをバッファリングする働きを持つため、必要なパラメータは書き込み対象のデータ(writable data)のみです。

cork()メソッドの使用例

まず、「cork.js」という名前のファイルを作成し、以下のコードスニペットをコピーしてください。ファイル作成後、次のコマンドでコードを実行できます。

node cork.js

cork.js

// Program to demonstrate writable.cork() method
const stream = require('stream');

// Creating a data stream with writable
const writable = new stream.Writable({
    // Writing the data from stream
    write: function(chunk, encoding, next) {
        // Converting the data chunk to be displayed
        console.log(chunk.toString());
        next();
    }
});

// Writing data
writable.write('Hi - This data is printed');

// Calling the cork() function
writable.cork();

// Again writing some data
writable.write('Welcome to TutorialsPoint !');
writable.write('SIMPLY LEARNING ');
writable.write('This data will be corked in the memory');

実行結果

C:\home\node>> node cork.js
Hi - This data is printed

cork()メソッドが呼び出された時点より前に書き込まれたデータだけが出力され、それ以降に書き込まれた残りのデータはバッファメモリ内に保留(cork)された状態になります。

uncork()メソッドの使用例

続いて、uncork()メソッドを使ってバッファされたデータを解放する方法を見てみましょう。「uncork.js」というファイルを作成し、以下のコードを記述します。

// Program to demonstrate writable.cork() method
const stream = require('stream');

// Creating a data stream with writable
const writable = new stream.Writable({
    // Writing the data from stream
    write: function(chunk, encoding, next) {
        // Converting the data chunk to be displayed
        console.log(chunk.toString());
        next();
    }
});

// Writing data
writable.write('Hi - This data is printed');

// Calling the cork() function
writable.cork();

// Again writing some data
writable.write('Welcome to TutorialsPoint !');
writable.write('SIMPLY LEARNING ');
writable.write('This data will be corked in the memory');

// Flushing the data from buffered memory
writable.uncork()

実行結果

C:\home\node>> node uncork.js
Hi - This data is printed
Welcome to TutorialsPoint !
SIMPLY LEARNING
This data will be corked in the memory

uncork()メソッドによってバッファメモリがフラッシュされると、先ほど保留されていたデータも含め、上記の例の全データが完全に出力されます。

このように、cork()uncork()を組み合わせることで、書き込みタイミングを柔軟に制御でき、ストリーム処理の効率化を図ることが可能です。

  1. Node.jsのsend()・sendStatus()・json()メソッドの違いと使い方

    Node.jsのWebアプリケーションフレームワーク「Express」には、サーバーからクライアントへレスポンスを送信するためのメソッドがいくつか用意されています。この記事では、その中でも頻繁に使用されるsend()・sendStatus()・json()の3つのメソッドについて、それぞれの役割の違いと実際の使い方をサンプルコード付きで解説します。 各メソッドの概要と違い send():文字列形式でデータをクライアントへ送信します。テキストやHTMLなど、汎用的なレスポンス送信に適しています。 json():オブジェクトなどをJSON形式に変換して送信します。Content-Typeヘッダ

  2. データ構造入門:圧縮四分木と八分木(Octree)の基礎と活用法

    圧縮四分木(Compressed Quadtree)とは四分木では、分割されたセルごとにノードを保存していくため、データを持たない空のノードが大量に発生しがちです。こうした疎なツリーのサイズを抑えるには、意味のあるデータを保持する葉を持つ部分木、いわゆる「重要な部分木」だけを保存すれば十分です。さらにサイズを削減することも可能です。重要な部分木だけを扱う場合、枝刈りの過程で、中間ノードの次数が2(親へのリンク1つと子へのリンク1つのみ)であるような長いパスを取り除けます。実際には、そのパスの始点にあるノードUだけを保存し(削除したノード群を表すメタデータをUに関連付けておき)、パスの終点を根と