この記事では、node.js ストリーム API を浅いものから深いものまで紹介します。具体的な詳細については、以下を参照してください。
基本的な紹介
Node.js では、ファイルを読み取る方法が 2 つあります。1 つは fs.readFile を使用する方法、もう 1 つは fs.createReadStream を使用して読み取る方法です。
fs.readFile は、すべての Node.js ユーザーにとって最も馴染みのあるもので、理解しやすく、使いやすいです。ただし、大きなファイルに遭遇すると、すべてのデータが最初にメモリに読み込まれるため、この方法での読み取り効率が非常に低いという欠点があります。
fs.createReadStream は Stream を通じてデータを読み取り、ファイル (データ) を小さな部分に分割し、特定のイベントをリッスンして特定の処理関数を作成します。この方法は上記の方法に比べて簡単ではありませんが、非常に効率的です。
実際、Stream は Node.js でのファイル処理に使用されるだけでなく、process.stdin/stdout、http、tcp ソケット、zlib、crypto などの他の場所でも見ることができます。
この記事は、Node.js の Stream API について学習した内容をまとめたものであり、皆様のお役に立てれば幸いです。
特徴
イベントベースのコミュニケーション
パイプを介してストリームを接続できます
タイプ
Readable Stream 読み取り可能なデータ ストリーム
Writeable Stream 書き込み可能なデータ ストリーム
デュプレックス ストリームは、同時に読み取りと書き込みができる双方向データ ストリームです
Transform Stream は、読み取りと書き込みが可能なデータ ストリームを変換し、データの変換 (処理) も可能です
イベント
読み取り可能なデータ ストリームのイベント
データ流出時の読み取り可能なトリガー
data 明示的に一時停止されていないデータ ストリームの場合、データ イベント リスニング関数を追加します。これにより、データ ストリームがストリーム ダイナミクスに切り替わり、できるだけ早くデータが外部に提供されます。
end はデータの読み取り時にトリガーされます。 writeableStream.end() と混同しないように注意してください。 writeableStream には終了イベントがなく、.end() メソッド
があるだけです。データ ソースが閉じられるとクローズがトリガーされます
データの読み取り中にエラーが発生したときにトリガーされるエラー
書き込み可能なデータ ストリームのイベント
drain writable.write(chunk) は false を返します。すべてのキャッシュが書き込まれた後、再度書き込めるようになるとトリガーされます。
finish が .end メソッドを呼び出すと、読み取り可能なデータ ストリームの end イベントと同様に、キャッシュされたデータがすべて解放された後にトリガーされ、書き込みプロセスの終了を示します
パイプがパイプターゲットとして使用されるときにトリガーされます
unpipe unpipe がターゲットの場合にトリガーされます
データの書き込み時にエラーが発生した場合にトリガーされるエラー
ステータス
読み取り可能なデータ ストリームには、ストリームの動的状態と一時停止状態の 2 つの状態があります。データ ストリームの状態を変更する方法は次のとおりです。
一時停止ステータス -> ストリーミング ステータスデータイベントのリスニング関数を追加します
再開メソッドの呼び出し
パイプメソッドを呼び出す
注: ストリーミング ダイナミクスに変換するときに、データ イベントのリスニング関数がなく、パイプ メソッドの宛先がない場合、データは失われます。
ストリーミングステータス -> 一時停止ステータス
パイプメソッドの宛先が存在しない場合、pauseメソッドが呼び出されます
パイプ メソッドの宛先がある場合は、すべてのデータ イベント リスニング関数を削除し、unpipe メソッドを呼び出してすべてのパイプ メソッドの宛先を削除します
注: データ イベントのリッスン機能を削除するだけでは、データ フローが自動的に「一時停止状態」になるわけではありません。さらに、パイプ メソッドの宛先がある場合に一時停止メソッドを呼び出しても、それらの宛先がデータ要求を発行した後、データ フローが常に一時停止されるとは限りません。
使用法
ファイルの読み取りと書き込み
var fs = require('fs'); // 新建可读数据流 var rs = fs.createReadStream('./test1.txt'); // 新建可写数据流 var ws = fs.createWriteStream('./test2.txt'); // 监听可读数据流结束事件 rs.on('end', function() { console.log('read text1.txt successfully!'); }); // 监听可写数据流结束事件 ws.on('finish', function() { console.log('write text2.txt successfully!'); }); // 把可读数据流转换成流动态,流进可写数据流中 rs.pipe(ws); 读取 CSV 文件,并上传数据(我在生产环境中写过) var fs = require('fs'); var es = require('event-stream'); var csv = require('csv'); var parser = csv.parse(); var transformer = csv.transform(function(record) { return record.join(','); }); var data = fs.createReadStream('./demo.csv'); data .pipe(parser) .pipe(transformer) // 处理前一个 stream 传递过来的数据 .pipe(es.map(function(data, callback) { upload(data, function(err) { callback(err); }); })) // 相当于监听前一个 stream 的 end 事件 .pipe(es.wait(function(err, body) { process.stdout.write('done!'); }));
その他の使用法
https://github.com/jeresig/node-stream-playground を参照して、サンプル Web サイトに入った後、ストリームの追加をクリックして結果を直接確認します。
よくある落とし穴
rs.pipe(ws) を使用してファイルを書き込むと、rs の内容が ws の後ろに追加されませんが、ws の元の内容が rs の内容で直接上書きされます終了/閉じられたストリームは再利用できないため、データ ストリームを再作成する必要があります
パイプ メソッドはターゲット データ ストリームを返します。たとえば、a.pipe(b) は b を返します。そのため、イベントをリッスンするときは、監視しているオブジェクトが正しいかどうかに注意してください
複数のデータ ストリームを監視する必要があり、パイプ メソッドを使用してデータ ストリームを直列に接続する場合は、次のように記述する必要があります:
データ
.on('end', function() { console.log('data end'); }) .pipe(a) .on('end', function() { console.log('a end'); }) .pipe(b) .on('end', function() { console.log('b end'); });
一般的に使用されるクラス ライブラリ
イベントストリームを使用すると関数型プログラミングのように感じられ、個人的には気に入っていますawesome-nodejs#streams 他のストリームライブラリを使ったことがないので、必要な場合はここを見てください
上記の内容は編集者が紹介したNode.jsでのStream APIの使い方です。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

ドリームウィーバー CS6
ビジュアル Web 開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。
