6

私はこの記事を読んでいます:http://elegantcode.com/2011/04/06/taking-baby-steps-with-node-js-pumping-data-between-streams/そしてストリームを理解するのに少し問題があります。

引用:

"Suppose we want to develop a simple web application
that reads a particular file from disk and send it to the browser.
The following code shows a very simple and naïve implementation
in order to make this happen."

したがって、コードサンプルは次のとおりです。

var readStream = fileSystem.createReadStream(filePath);
readStream.on('data', function(data) {
    response.write(data);
});

readStream.on('end', function() {
    response.end();        
});

単純にできるのに、なぜ上記のように使用するのでしょうか。

fs.readFile(filePath, function(err, data){
  response.write(data);
  response.end();
});

いつまたはなぜストリームを使用しますか?

4

2 に答える 2

15

大きなファイルを扱うときは、ストリームを使用します。コールバックを使用すると、ファイルのすべてのコンテンツを一度にメモリにロードする必要がありますが、ストリームを使用すると、ファイルのチャンクのみが常にメモリに存在します。

また、ストリーム インターフェイスは間違いなくより洗練されています。datadrain、およびコールバックを明示的にアタッチする代わりにend、代わりに を使用できますpipe

var readStream = fileSystem.createReadStream(filePath);
readStream.pipe(response);
于 2012-09-16T02:36:32.783 に答える
5

大きな理由の 1 つは、データがすべてメモリに格納される前にデータの処理を開始できることです。ロード中にクリップの視聴を開始できる「ストリーミング ビデオ」を考えてみてください。多くのユースケースでは、ストリームを使用すると、ファイル全体をロードする前にファイルからデータの処理を開始できます。

もう 1 つの一般的な使用例は、データ内に何らかの状態が検出されるまでオブジェクトを読み取りたい場合です。大きなファイルに「rabbit」という単語が含まれているかどうかを確認する必要があるとします。コールバック パターンを使用する場合は、ファイル全体をメモリに読み込んでから、ファイルを調べて、単語が内部にあるかどうかを確認する必要があります。ストリームを使用すると、ファイルの 5 行目にある単語を検出でき、全体をロードせずにストリームを閉じることができます。

明らかにもっと複雑なユースケースがたくさんあり、簡単にするためにコールバックがより理にかなっている場合がまだたくさんあります (「ウサギ」が表示された合計回数をカウントする必要がある場合など)。とにかくファイル)。

于 2013-08-04T20:54:11.297 に答える