node.jsは、今日の最もホットなテクノロジーの1つである必要があります。この記事では、主にnode.jsの特性とアプリケーションシナリオを紹介します。
node.jsは、Chrome JavaScriptランタイムに基づいて構築されたプラットフォームであり、高速で簡単なネットワークアプリケーションを簡単に構築するために使用されます。 node.jsは、イベント駆動型で軽量で効率的になり、分散デバイスで実行されているデータ集約型のリアルタイムアプリケーションに最適です。
1。機能
1.1非同期I/O
いわゆる非同期I/Oは、同期I/Oに関連しています。多くのI/O操作は、ファイルの読み取りと書き込み、入力と出力、リクエスト応答など、プログラムの実行中に実行する必要があります。一般的に言えば、I/O操作は時間がかかります。たとえば、従来のプログラミングモードでは、いくつかのgのファイルを読み取る必要があります。スレッド全体が一時停止され、ファイルが読み取られて実行され続けるのを待ちます。言い換えれば、I/O操作はコードの実行をブロックし、プログラムの効率を大幅に削減します。
非同期I/Oに関しては、AJAX要求を開始することが最も一般的な「非同期」コールであるため、実際にはフロントエンドエンジニアにはなじみのないものではありません。ノードでは、ファイルの読み取り(ファイルの読み取りは時間のかかるI/O操作です)を例にとると、AJAXリクエストの開始方法と非常に似ています。
コードコピーは次のとおりです。
var fs = require( 'fs');
fs.readfile( '/path'、function(err、file){
console.log( 'read file completed');
});
console.log( 'Fileの読み取りを開始');
上記のコードがfs.readfileと呼ばれると、後続のコードがすぐに実行され、「読み取りファイルが完了する」時間は予測不可能です。スレッドがI/O操作に遭遇すると、I/O操作がブロッキング方法で終了するのを待つことはありませんが、I/O要求をオペレーティングシステムに送信し、後続のステートメントを実行し続けます。オペレーティングシステムがI/O操作を完了すると、I/O操作を実行するスレッドがイベントの形で通知され、スレッドは特定の時間にイベントを処理します。
1.2イベントループとコールバック関数
いわゆるイベントループは、ノードがイベントメカニズムを使用してすべての非同期操作を解決することを意味し、スレッドは絶えずループしてイベントキューを検出しています。イベントループは、プログラムが終了するまで、イベントキューでハンドルされていないイベントをチェックします。イベントのプログラミング方法には、軽量、ゆるい結合、およびトランザクションポイントのみに焦点を当てることの利点があります。ただし、複数の非同期タスクのシナリオでは、イベントは互いに独立しており、協力する方法は問題です。 JavaScriptでは、コールバック関数はどこにでもあり、コールバック関数は、データを返すための非同期呼び出しを受け入れる最良の方法です。
1.3シングルスレッド
ノードは、ブラウザ内の単一のスレッドとしてJSの特性を維持します。シングルスレッドの最大の利点は、マルチスレッドプログラミング、デッドロック、スレッドコンテキストスイッチングのオーバーヘッドなどの状態意識の同期問題を必要としないことです。単一のスレッドには、主に3つの側面で明らかにされた弱点もあります。マルチコアCPUを利用できないことです。エラーにより、アプリケーション全体が終了し、アプリケーションの堅牢性は大学院入学試験に値します。大量のコンピューティングがCPUを占有し、非同期I/Oを呼び出すことを継続することを不可能にします。
上記の問題を解決するために、ノードはHTML5 Webワーカーと同じアイデアを採用し、Child_Processを使用して単一のスレッドで大量の計算の問題を解決します。各子プロセスに計算を分配することにより、多数の計算を分解し、結果をプロセス間のイベントメッセージに渡すことができます。
1.4クロスプラットフォーム
ノードはクロスプラットフォームです。つまり、JSコードの同じセットを展開して、Windows、Linux、OSX、その他のプラットフォームで実行できます。これは主に、ノードがオペレーティングシステムとノードのアッパーレベルモジュールシステムの間にプラットフォームレベルのアーキテクチャリブブを構築したという事実によるものです。
2。アプリケーションシナリオ
1)リアルタイムアプリケーション:オンラインチャット、リアルタイム通知のプッシュなど(socket.ioなど)
2)分散アプリケーション:効率的な並列I/Oを使用して既存のデータを使用します
3)ツールアプリケーション:フロントエンドの圧縮展開(グラントなど)からデスクトップグラフィカルインターフェイスアプリケーションまで、巨大なツール
4)ゲームアプリケーション:ゲームフィールドには、リアルタイムと並行性(NetEaseのポメロフレームワークなど)の要件が高いです
5)安定したインターフェイスを使用して、Webレンダリング機能を改善します
6)統一されたフロントエンドプログラミング言語環境:フロントエンド開発者は、サーバー側の開発をすばやく入力できます(有名な純粋なJavaScriptフルスタックの平均アーキテクチャなど)