ホームページ >ウェブフロントエンド >jsチュートリアル >Node.js 入門チュートリアル
Node.js は、Chrome JavaScript ランタイム上に構築されたプラットフォームです。次に、この記事を通して、node.js を始める前編を紹介しますので、興味のある方は一緒に見てください
1. Node.js とは
サーバー側で実行されている JavaScript です。
Node.js は、Chrome JavaScript ランタイム上に構築されたプラットフォームです。
Node.js は、Google の V8 エンジン (Google の Chrome ブラウザーで使用される JavaScript 実行環境) をベースにしたイベント駆動型の I/O サーバーサイド JavaScript 環境です。
V8 エンジンは JavaScript を非常に高速に実行し、非常に優れたパフォーマンスを発揮します。 。
2. NodeJS を選ぶ理由
あなたがフロントエンド プログラマーで、PHP、Python、Ruby などの動的プログラミング言語を知らなくても、独自のサービスを作成したい場合は、 Node.js は非常に良い選択です。
Node.js はサーバー側で実行される JavaScript です。JavaScript に慣れている場合は、Node.js を簡単に学習できます。
もちろん、あなたがバックエンド プログラマーで、高パフォーマンスのサービスをデプロイしたい場合は、Node.js を学習することも非常に良い選択です。
3. NodeJSの特徴
まずはNodeJS公式サイトの紹介を見てみましょう:
Node.jsは、高速でスケーラブルなネットワークアプリケーションを簡単に構築するためのChromeのJavaScriptランタイム上に構築されたプラットフォームです。 .js はイベント駆動型のノンブロッキング I/O モデルを使用しているため、軽量かつ効率的であり、分散デバイス間で実行されるデータ集約型のリアルタイム アプリケーションに最適です
2. Chrome V8 に依存します。コード解釈用エンジン 3. イベント駆動型 4. ノンブロッキングI/O
5. 軽量でスケーラブル、リアルタイムデータ対話アプリケーションに適しています
6 .単一プロセス、単一スレッド
非同期のイベント駆動型モデル
また、リクエストを開始してサーバー側の応答を待つ必要がありますが、銀行の例とは異なり、今回は番号を取得した後で食事の注文を完了しています。 ,
番号を取得した後、その場所で待機することが多く、後ろのリクエストも同様に処理され続け、番号を取得して脇に待機し、受付係が処理を続けることができます。食事が注文されると、その番号が呼び出され、自分の食事を取得し、その後の処理(食べる)を行います この番号を呼ぶ動作をNodeJSではコールバックと呼び、イベント(料理、 I/O) 処理が完了した後、後続のロジック (食べる) を実行し続けます
これは NodeJS の優れた機能、非同期メカニズム、イベント駆動型を反映しています
プロセス全体が新しいユーザーの接続をブロックしません (食べ物を注文するユーザーとシェフの間の接続には、イベント駆動型モデルが使用されます。Web サーバーはリクエストを受信すると、リクエストを閉じて処理し、サービスを提供します。次の Web リクエスト。リクエストが完了すると、リクエストは処理キューに戻され、キューの先頭に達すると結果がユーザーに返されます。このモデルは、Web サーバーが読み取りまたは書き込み操作を待たずに常にリクエストを受け入れるため、非常に効率的でスケーラブルです。 (これは、ノンブロッキング IO またはイベントドリブン IO とも呼ばれます)
このメカニズムに基づいて、NodeJS は理論的には、次々に接続を要求するユーザーに応答することができるため、Java や PHP プログラムよりも高い同時実行性をサポートできます。ボリューム
イベントキューの維持にはコストがかかりますが、NodeJSはシングルスレッドであるため、イベントキューが長いほど応答を得るまでに時間がかかり、同時実行ボリュームは依然として制限を超えます
NodeJS が同時接続の問題をどのように解決するかをまとめてみましょう。 問題:
各接続は、NodeJS エンジン プロセスで実行されるイベント (Event) を発行し、それをイベント キューに入れます。
接続ごとに 1 つを生成する代わりに 新しい OS スレッド (そしてそれにサポートするメモリを割り当てます)
I/O ブロック
NodeJS が解決するもう 1 つの問題は、次のビジネス シナリオを見てください。複数のデータソースからデータを取得する必要がある データをプルしてから処理する
(1) データのシリアル取得、これは私たちの一般的なソリューションです。PHPを例に挙げます
プロファイルの取得とタイムラインの操作にそれぞれ1Sが必要な場合, その場合、シリアル取得には2Sが必要です
(2) NodeJSのノンブロッキングI/O、実行プロセスを制御するためのイベントの発行/リッスンNodeJS は I/O イベントに遭遇すると、実行するスレッドを作成し、その後メインスレッドが実行を継続します
したがって、プロファイルを取得するアクションは I/O イベントをトリガーし、アクションが発生します。タイムライン取得のアクション、
それぞれに 1 秒かかる場合、合計時間は 1 秒です
それらの I/O 操作が完了すると、イベント、プロファイル、タイムラインが発行されます。
イベントエージェントは受信後に続行します この背後にあるロジックを実行します これが NodeJS のノンブロッキング I/O の特徴です
要約すると:
Java や PHP にも並列リクエスト (サブスレッド) を実装する方法がありますが、 NodeJS はコールバック関数 (Callback) と非同期メカニズムを通じてそれを行うことができます 非常に自然です
4. NodeJS の利点と欠点
利点: 1. 高い同時実行性 (最も重要な利点) 2. 私に適しています/O 集中型アプリケーション
欠点:
1. CPU 集中型アプリケーションには適していません。CPU 集中型アプリケーションが Node にもたらす主な課題は次のとおりです。 JavaScript のシングルスレッドが原因で、長時間実行される計算 (大規模なループなど)、CPU タイム スライスが解放されず、後続の I/O を開始できなくなります。
解決策: 開始をブロックせずに操作をタイムリーに解放できるように、大規模なコンピューティング タスクを複数の小さなタスクに分解します。
2. シングルコア CPU のみをサポートしており、CPU を最大限に活用することはできません
3. コード内の特定のリンクがクラッシュすると、システム全体が崩壊します
原因: 単一プロセス。シングルスレッド
解決策: (1) Nnigx リバースプロキシ、ロードバランシング、複数のプロセスを開く、複数のポートをバインドする
(2) 複数のプロセスを開き、同じポートをリッスンする、クラスターモジュールを使用する
4. 品質。オープンソースのコンポーネントライブラリは不均一で、更新が早く、下位互換性がありません
5. デバッグが不便、エラーにはスタックトレースがありません
以上がNode.js 入門チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。