ホームページ > 記事 > ウェブフロントエンド > 初心者のための Node.js チュートリアル (1)
今回は Node.js の初心者向けチュートリアルをお届けします。以下は実際的なケースです。
メインライン: Node.js とは -> Node.js の特徴 -> コアモジュール ->モジュール --> パッケージ --> パッケージ マネージャー --> コールバック関数 -->
ノードとは何ですか? Node.js という名前を見て、一見すると jQuery のようなライブラリやフレームワークかと思う人もいるかもしれませんが、実際には Node.js はサーバー上で JavaScript を実行できるプラットフォームです。 、または Node.js は、非ブラウザ環境で JavaScript を実行できるようにするツールであり、世界最速の Chrome v8 エンジンと呼ばれるものを使用しており、Core JavaScript と Node Composited の 2 つの部分で構成されています。標準ライブラリであるコア JavaScript は実際には ECMAScript を参照します。つまり、ブラウザ側の JS スクリプトに ECMAScript のみが含まれており、ドキュメント オブジェクト モデル (DOM) とブラウザ オブジェクト モデル (BOM) は含まれていないと考える人もいます。そのノードには互換性の問題がありますか? Node との互換性の問題はありません。クライアント ブラウザの JS スクリプトを学習しているためです。また、よく話題になる JS の互換性の問題は、実際には DOM と BOM の互換性の問題を指していることを理解する必要があります。Node 標準ライブラリとは何ですか?これは、C 標準ライブラリまたは C++ 標準拡張ライブラリに似ています。Node.js の特徴は、ノンブロッキングの非同期イベント駆動型であるため、JavaScript をスクリプトの世界に統合できます。まず最初の例、helloworld を見てください。この helloworld は他の言語よりも複雑だと思われますか?ただし、これら 6 行のコードで実装されている関数を見てみましょう。Node.js の柱の 1 つはモジュールなので、最初に学習する必要があるのはモジュールです。モジュール?モジュールは実際には js ファイルです。クライアント ブラウザでは、css ファイルを埋め込んで別の css ファイルを導入したい場合は @import ディレクティブを使用できますが、js で別の css ファイル js を導入したい場合は、もちろん、それが実現できないというわけではありません。createElement を使用して script タグを作成し、HTML に appendChild を追加するだけで実現できます。はい、私たちのノードはこの問題を解決しました。私たちのノードでは、js ファイルが 2 つの js ファイルを作成しましたが、どうすれば 1 つの js ファイルに別の js ファイルを導入できるでしょうか。これは、require という関数を通じて導入でき、最終的には属性とメソッドを公開する module.exports という関数を通じていくつかのプロパティとメソッドを公開します。 1 つはコア モジュールで、一般的なコア モジュールには、http モジュール、オペレーティング システム関連のモジュール、および処理やファイル操作を行うファイル システム モジュールが含まれます。 、util モジュール ツール、もう 1 つはローカル モジュールです。いわゆるローカル モジュールは、モジュールと比較して、より大きな単位がパッケージです。モジュールをファイルの 1 つと考えることができ、パッケージをフォルダーと考えることができます。つまり、フォルダーを使用して、同様の機能を持つ多数のファイルをまとめてパッケージ化することができます。パッケージに関して言えば、私たちが自分で作成したパッケージに加えて、より重要なのは、npm.org Web サイトには、数十社が実装した多数のサードパーティ パッケージがあります。何千人もの人々がそれを使いたいのですが、具体的にはどうやって使うのですか?サードパーティのパッケージを簡単に使用できるようにするために、私たちの Node はパッケージ管理ツールと呼ばれるツールを開発しました。これは私たちの npm です。このツールの使用方法を簡単に見てみましょう。 1 つはグローバル インストールで、もう 1 つはローカル インストールです。これは、たとえば、Python や Ruby のように、コマンド ライン操作に適している場合があります。私たちのlessc、別のローカルパッケージは一般に、現在取り組んでいるいくつかのプロジェクトで使用されています。 もちろん、これらのものだけがあれば、Node.jsには大きな機能はありません。これらのものは実際には他の言語で利用可能であるためです。 Python や Ruby など。Node.js の最大の特徴は、実際には非同期のノンブロッキング モジュールとイベント プログラミング モジュールです。これは他の言語とは大きく異なります。たとえば、次のようなものです。 2 つの例を説明します。同期 IO を実装しており、クエリしたいものは通常、php などの次のコードを作成することを前提としています。この形式では、つまり、最初に db.query を使用し、次に SQL クエリがブロックされ、データベースが結果を返して res 変数に格納するのを待ちます。ただし、実際の記述方法は次のとおりです。これは非同期を使用します。実際、このステートメントは、このような SQL クエリを生成し、ステートメントの後に関数を配置することがわかります。この関数はコールバック関数と呼ばれます。 res.auto が実行されると、直接実行されません。内部のコンテンツはいつ実行されますか?データベースがメッセージを返すまで待機し、イベント ループを通じてコールバック関数を入力し、クエリ結果を出力します。次に、同期とは何か、非同期とは何か、およびプログラムの実行について説明します。 IO 操作には時間がかかり、数十万または数億の命令サイクルがかかる場合がありますが、JavaScript ステートメントの実行には数百または数千の命令サイクルしかかからない場合もあります。もちろん、最適化されている可能性があります。おそらく必要なのは数十個だけなので、IO が発生すると時間の無駄になります。オペレーティング システムと CPU は割り込みを介して非同期スケジューリング メソッドを実装します。つまり、プロセスが IO 要求を開始すると、オペレーティング システムがハングします。 IO が完了すると、オペレーティング システムは元のプロセスを再開し、実行を継続します。同時に、このリクエストの結果にアクセスできます。メソッドが呼び出されます。これは同期 IO、またはブロッキング IO ですが、ノードの IO モードでは、非同期 IO、または非ブロッキング IO が使用されます。これは、プロセスが IO リクエストを開始した後、すぐに戻り、他の実行を継続することを意味します。タスクを実行し、他の手段を使用して IO 操作が完了したことを通知し、IO 操作が完了した後にロジック コードを処理します。その後、ノンブロッキング IO が開始されると、プロセスはブロッキング状態に入りません。ただし、他の部分はイベント ループに入り、他のイベントを処理します。ここでは、ノード内のすべての計算ロジック操作がイベントに抽象化されます。プログラム全体がイベント ループであり、イベント ループはイベント キューと呼ばれるものの処理を継続します。つまり、最初にイベントがあり、実行プロセス中に IO リクエストなどのいくつかのリクエストが開始されることがあります。 IO リクエストが完了すると、イベント キューがイベント キューに追加され、プロセスがイベント ループに入るまで待機します。これは、イベント ループに基づいた処理モードです。 qt、gtk などのクラシックで一般的に使用されるモード。たとえば、マウスのクリックもイベントであり、イベントにはコールバック関数が必要です。では、なぜ Node はこの不明瞭なプログラミング モデルを使用するのでしょうか?実際、これは Node のもう 1 つの非常に特殊な戦略です。これはシングルスレッド モードを使用します。たとえば、Web サーバーを開発したい場合は、当然ながら同時実行性の要件が必要です。複数のユーザーの同時アクセスを許可することは、1 人のユーザーのリクエストを処理してから 2 番目のユーザーのリクエストを処理するという意味ではありません。この場合、ユーザーが増えると処理速度が非常に遅くなります。ユーザーは非常に遅く、切断されません。他のユーザーは待ち続けることになります。これは不合理です。ブロッキング モードで同時実行を実現するには、マルチスレッドを使用する必要があります。つまり、改善したい場合は、1 つのプロセスで 1 つのタスクしか処理できません。 CPU のスループット、マルチスレッドを使用する必要があります。これは、CPU コアの数よりもはるかに多く必要になる可能性があります。たとえば、あるロジックでは、これは予測できません。最初に計算の一部を計算し、次にファイルの読み取りや書き込みなどの IO リクエストを開始するか、ネットワーク リクエストを開始します。その後、2 番目の計算部分に入ります。同時実行を実現するには、マルチスレッド モードを使用します。その実行はそのような例の 1 つであり、CPU が 1 つあると仮定すると、最初のスレッドが計算のために CPU を捕捉し、その後 IO 要求ステージに到達してブロックされます。この時点で、CPU の制御が転送されます。 、そしてこの時点で、2 番目のスレッドが CPU を捕捉し、その後 IO に入り、再びブロックされ、その後 CPU、スレッド 3、スレッド 4、スレッド 5 などの制御を解放します。その後、一定の期間が発生する可能性があります。途中でアイドル時間が発生し、スレッド 1 を待ちます。IO が終了し、CPU が占有されていないことがわかり、CPU を使用して計算を開始します。このような計算と IO に基づく同時プリエンプティブ モードですが、ノンブロッキング モデルの場合、そのモデルは次のようになります。シングルスレッドの計算 1 は、非同期 IO リクエストを開始します。この時点で、別の計算 1 (別のユーザーによって開始された計算 1 である可能性があります) に直接入ります。次に 2 番目のリクエストを開始し、5 ユーザーを待ちます。開始後、最初のユーザーの計算はこの時点で終了し、イベント ループは最初のユーザーによって開始された IO リクエストを実行する単一のスレッドになります。理論的には、ノンブロッキング モードのプロセスによる CPU 使用率は 100% であり、これは理想的な状況であり、複数のスレッドが必要になる場合はありません。 ?複数のコアがある場合、たとえば 2 つのコアがある場合、2 つのスレッドをオープンします。 では、ノンブロッキングにはブロッキングと比べてどのような利点があるのでしょうか。マルチスレッドは高速に聞こえますが、実際にはそれほど高速ではありません。スイッチングのため、20 ミリ秒ごとにステーションを切り替えると、CPU キャッシュの使用効率が非常に低くなり、ノンブロッキングはあまり効率的ではありません。はい、最初に最初のファイルを読み取り、次に 2 番目のファイルを読み取ります。これは mongoDB 操作です。ここでは Node の基本について説明しましたが、Node の応用は何でしょうか?まず、Node には多くのサードパーティ モジュールがあり、たとえば、Web サイトを作成したい場合は、jade と呼ばれるテンプレート エンジンを使用して HTML を生成できます。 cssの生成、javascript圧縮ツール、websocketの使用、socket.io、SQLデータベースのORM、oAuth、デーモンプロセス、コマンドライン解析、構文解析、DOMとは関係ありませんが、実際に処理できるのは、ファイルのアップロード、構文のハイライト表示、マークダウンの解析、エンコード変換の画像処理、軽量のスレッドとコルーチン、コーヒースクリプト、およびブラウザー側での静的分析です。今日は、Node.js の紹介です。
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨書籍:
angularjs での $apply() の使用方法の詳細な説明
以上が初心者のための Node.js チュートリアル (1)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。