私はあなたの痛みをどのように感じますか!
多くの人と同じように、Node.jsの本質にたどり着くのは難しいと感じました。ほとんどの人は、Nodeの有用だと思う部分だけを書いたり話したりするからです。そして、興味深いと思う部分は、通常、Nodeの主要な利点ではなく、副次的な利点です。目的。Nodeは単なるJavaScriptランタイムであると人々が言うのは気が狂っていると私は言わなければなりません。JavaScriptをノードの使用-とV8ランタイムのその選択-単にある目的を達成するための手段、ノードの開発者が解決したいとの問題のための最高のツール。
Nodeの主な目的は、Webアプリでのユーザーイベントの管理をより効率的にすることでした。だからノードは圧倒的にWebアプリのバックエンドで使用されます。イベント管理では、サーバーマシンでこれらのユーザーイベントをリッスンしているものが必要です。したがって、各イベントを適切なハンドラスクリプトにルーティングするようにhttpサーバーを設定する必要があります。Nodeは、ユーザーの要求を専用ポートでリッスンするようにサーバーをすばやくセットアップするためのフレームワークを提供します。JavaScriptにはコールバック関数があるため、ノードはイベント処理にJavaScriptを使用します。これにより、依存タスクの結果が返されるまで1つのタスクを一時停止できます。他の多くの言語にはこの機能がなく、GoogleのV8ランタイムほど効率的なインタプリタがない言語もあります。ほとんどのWeb開発者はJavaScriptを知っているので、Nodeで追加の言語学習を行う必要はありません。さらに、コールバック関数を使用すると、すべてのユーザータスクを単一のスレッドに配置できますデータベースまたはファイルシステムへのアクセスを要求するタスクに明示的なブロックを適用する必要はありません。そしてこれが、ノードの開発の主な目的である、大量の同時使用の下でのノードの優れた実行効率につながるものです。
Nodeユーザーがバックエンドコードをすばやく作成できるように、Nodeの開発者は、ルーチンタスク(HTTPリクエスト、文字列(デコード)コーディング、ストリームなどに関連する事項)用の組み込みJSライブラリとNPM(Node Package Manager)リポジトリの両方を整理しました。 :これは、さまざまな標準およびカスタム関数用の、ユーザーが管理するオープンソースのスクリプトパッケージのセットです。すべてのノードプロジェクトでは、確立されたnpminstall コマンドを介してNPMパッケージをプロジェクトにインポートできます。
Nodeを介して処理されるユーザー要求は、認証、データベースクエリ、コンテンツ管理(Strapi CMS)などのWebアプリに必要なものになります。これらはすべて、Nodeポートに送信されます。(データベースから取得したデータの分析に多くのCPU時間がかかる場合、このタイプのプロセスは別のスレッドに配置するのが最適であるため、単純なユーザー要求が遅くなることはありません。)他のタイプのユーザー要求(別のWebページの読み込みなど) 、CSS / JS /画像ファイルのダウンロードなどは、引き続きブラウザによって、Webサーバープログラム(Apache、NGinxなど)が処理するサーバーマシンのデフォルトポートに送信されます。
したがって、実際には、Nodeは主にサーバーの迅速な作成とイベント処理のためのフレームワークですが、Webサーバープログラムの一部の機能のみを置き換えるものです。
Nodeの他の非バックエンドの使用法は、V8エンジンなど、その機能のいずれかを利用するだけです。たとえば、フロントエンドビルドツールのGruntとGulpは、Node.jsを使用して、SASSをCSSに変換したり、CSS / JSファイルを縮小したり、画像サイズや読み込みを最適化したりするようにコーディングできるビルドスクリプトを処理します。しかし、この種の作業は実際にはNodeの副産物の使用であり、Webアプリケーションの効率的なバックエンドプロセスを作成するための主な使用ではありません。