2012-09-16 12 views
5

この記事を読むにはhttp://elegantcode.com/2011/04/06/taking-baby-steps-with-node-js-pumping-data-between-streams/、ストリームを理解するには少し問題があります。nodejsストリームとコールバック

引用:次のように

"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." 

だから、コードサンプルは次のとおりです。

を:私たちは、単に行うことができたときに

​​

は、なぜ我々は上記の方法を使用します

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

ストリームを使用する時期または理由は何ですか?

答えて

13

大きなファイルを扱う場合は、ストリームを使用します。コールバックでは、ファイルの内容はすべて一度にメモリにロードする必要がありますが、ストリームではファイルのチャンクだけがメモリに格納されます。

また、ストリームインターフェイスはおそらくもっとエレガントです。代わりに、明示的にdatadrain、およびendコールバックを取り付けるには、代わりにpipeを使用することができます。

var readStream = fileSystem.createReadStream(filePath); 
readStream.pipe(response); 
5

一つの大きな理由は、それがすべてのメモリである前に、データ上で仕事をして始めることができるということです。クリップがまだ読み込まれている間にクリップの視聴を開始できる「ストリーミングビデオ」と考えてください。多くのユースケースでは、ストリームを使用すると、ファイル全体をロードする前にファイルからデータを処理できるようになります。

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

明らかにもっと複雑なユースケースがありますが、コールバックがシンプルさにはさらに意味をなさない場合があります(たとえば、「ウサギ」の合計時間をカウントする必要がある場合など)。とにかくファイル全体を読み込む)。

関連する問題