ホームページ >ウェブフロントエンド >jsチュートリアル >Node.jsの特徴と活用シーンの紹介

Node.jsの特徴と活用シーンの紹介

高洛峰
高洛峰オリジナル
2017-02-04 10:16:121333ブラウズ

Node.js は、今日最も注目されているテクノロジーの 1 つであるはずです。この記事ではNode.jsの特徴や活用シーンを中心に紹介します。

Node.js は、Chrome JavaScript ランタイム上に構築されたプラットフォームで、高速で拡張性の高い Web アプリケーションを簡単に構築できます。 Node.js はイベント駆動型のノンブロッキング I/O モデルを使用して軽量かつ効率的になるため、分散デバイス上で実行されるデータ集約型のリアルタイム アプリケーションに非常に適しています。

1. 特徴

1.1 非同期 I/O

いわゆる非同期 I/O は、同期 I/O に関連しています。プログラムの実行中、ファイルの読み取りと書き込み、入出力、リクエストの応答など、多くの I/O 操作を実行する必要があります。一般に、I/O 操作は非常に時間がかかります。たとえば、従来のプログラミング モデルでは、数ギガバイトのファイルを読み取りたい場合、スレッド全体が一時停止し、ファイルが読み取られるのを待ってから続行します。つまり、I/O 操作によりコードの実行がブロックされ、プログラムの効率が大幅に低下します。

非同期 I/O については、Ajax リクエストの開始が最も一般的な「非同期」呼び出しであるため、フロントエンド エンジニアにとっては馴染みのないものではありません。 Node では、ファイルの読み取り (ファイルの読み取りは時間のかかる I/O 操作です) を例にとると、Ajax リクエストを開始する方法と非常によく似ています。

var fs = require('fs');
fs.readFile('/path', function(err, file) {
    console.log('读取文件完成');
});
console.log('开始读取文件');

上記のコードが fs.readFile を呼び出した後、後続のコードはすぐに実行されるため、「ファイルの読み取りが完了する」時間が予測できません。スレッドが I/O 操作に遭遇すると、ブロック的な方法で I/O 操作が終了するのを待つことはなく、I/O リクエストをオペレーティング システムに送信し、後続のステートメントの実行を続行します。オペレーティング システムは I/O 操作を完了すると、I/O 操作を実行しているスレッドにイベントの形式で通知し、スレッドは特定の時間にイベントを処理します。

1.2 イベントループとコールバック関数

いわゆるイベントループとは、ノードがイベントメカニズムを使用してすべての非同期操作を解決することを意味し、イベントキューを検出するために常にループするスレッドが存在します。イベント ループは、プログラムが終了するまで、イベント キューに未処理のイベントがないかチェックします。イベント プログラミング手法には、軽量、疎結合、トランザクション ポイントのみに焦点を当てるという利点がありますが、複数の非同期タスクのシナリオでは、イベントは互いに独立しており、どのように連携するかが問題になります。 Javascript ではコールバック関数があらゆる場所にあり、コールバック関数は非同期呼び出しから返されたデータを受け取る最良の方法です。

1.3 シングルスレッド

ノードは、ブラウザ内の JS のシングルスレッド特性を維持します。シングルスレッドの最大の利点は、マルチスレッド プログラミングのような状態同期の問題を心配する必要がないことです。デッドロックやスレッド コンテキストの切り替えのオーバーヘッドがありません。シングルスレッドには、主に 3 つの側面で弱点もあります。1 つは、マルチコア CPU を利用できないこと、エラーが発生するとアプリケーション全体が終了すること、およびアプリケーションの堅牢性が大量の CPU を占有することです。非同期 I/O の呼び出しを継続できなくなります。

上記の問題を解決するために、Node は HTML5 Web Worker と同じ考え方を採用し、child_process を使用して単一スレッドでの大量の計算の問題を解決します。計算をさまざまなサブプロセスに分散し、プロセス間でイベント メッセージを通じて結果を伝達することで、多数の計算を分割できます。

1.4 クロスプラットフォーム

Node はクロスプラットフォームです。つまり、同じ JS コードのセットを Windows、Linux、OSX、およびその他のプラットフォームにデプロイして実行できます。これは主に、Node がオペレーティング システムと Node の上位モジュール システムの間にプラットフォーム層アーキテクチャ libuv を構築しているためです。

Node.jsの特徴と活用シーンの紹介

2. アプリケーションシナリオ

1)、リアルタイムアプリケーション: オンラインチャット、リアルタイムプッシュ通知など (socket.io など)
2)、分散アプリケーション:効率的な並列 I/O データ
3)、ツール アプリケーション: フロントエンド圧縮デプロイメント (Grunt など) からデスクトップ グラフィカル インターフェイス アプリケーション
4) に至るまでの多数のツール、ゲーム アプリケーション: ゲーム分野には高い要件があります。リアルタイム性と同時実行性 (NetEase の pomelo フレームワークなど)
5)、Web レンダリング機能を向上させるための安定したインターフェイスの使用
6)、統合されたフロントエンドとバックエンドのプログラミング言語環境: フロントエンド開発者はサーバーにすぐに切り替えることができます。サイド開発 (有名な純粋な Javascript フルスタック MEAN アーキテクチャなど)

Node.js の特性とアプリケーション シナリオに関するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。