Node.jsとは正確には何ですか?

Node.jsはJavaScriptランタイム環境です。素晴らしいように聞こえますが、それはどういう意味ですか?それはどのように機能しますか?

Node.jsランタイム環境には、JavaScriptで記述されたプログラムを実行するために必要なすべてのものが含まれています。

Node.jsは、JavaScriptの元の開発者が、ブラウザーでのみ実行できるものから、スタンドアロンアプリケーションとしてマシン上で実行できるものに拡張したときに誕生しました。

これで、Webサイトをインタラクティブにするだけでなく、JavaScriptを使用してさらに多くのことができるようになりました。

JavaScriptには、Pythonなどの他のスクリプト言語で実行できることを実行する機能があります。

ブラウザのJavaScriptとNode.jsは、どちらもV8JavaScriptランタイムエンジンで実行されます。このエンジンはJavaScriptコードを受け取り、それをより高速なマシンコードに変換します。マシンコードは、コンピュータが最初に解釈しなくても実行できる低レベルのコードです。

なぜNode.jsなのか?

Node.jsの公式ウェブサイトに記載されている正式な定義は次のとおりです。

Node.js®は、ChromeのV8JavaScriptエンジン上に構築されたJavaScriptランタイムです。

Node.jsは、イベント駆動型の非ブロッキングI / Oモデルを使用しており、軽量で効率的です。

Node.jsのパッケージエコシステムであるnpmは、世界最大のオープンソースライブラリのエコシステムです。

この定義の最初の行については、すでに説明しました。「Node.js®は、ChromeのV8JavaScriptエンジン上に構築されたJavaScriptランタイムです。」次に、他の2行を理解して、Node.jsが非常に人気がある理由を確認しましょう。

I / Oは入力/出力を指します。ローカルファイルの読み取り/書き込みからAPIへのHTTPリクエストの作成まで、何でもかまいません。

I / Oには時間がかかるため、他の機能がブロックされます。

user1とuser2の詳細についてバックエンドデータベースを要求し、それらを画面/コンソールに出力するシナリオを考えてみます。このリクエストへの応答には時間がかかりますが、両方のユーザーデータリクエストを個別に同時に実行できます。

I / Oのブロック

ブロッキング方式では、user1のデータが画面に出力されるまで、user2のデータ要求は開始されません。

これがWebサーバーの場合、新しいユーザーごとに新しいスレッドを開始する必要があります。ただし、JavaScriptはシングルスレッドです(実際にはそうではありませんが、シングルスレッドのイベントループがあります。これについては後で説明します)。そのため、JavaScriptはマルチスレッドタスクにはあまり適していません。

そこで、ノンブロッキング部分が登場します。

ノンブロッキングI / O

一方、非ブロッキングリクエストを使用すると、user1のリクエストへの応答を待たずに、user2のデータリクエストを開始できます。両方のリクエストを並行して開始できます。

このノンブロッキングI / Oにより、サーバーは複数の要求を同時に処理できるため、マルチスレッドの必要がなくなります。

JavaScriptイベントループ

26分ある場合は、ノードイベントループのこの優れたビデオ説明をご覧ください。

それ以外の場合は、JavaScriptイベントループがどのように機能するかを簡単に説明します。

  1. main()コールスタックにプッシュします。
  2. console.log()コールスタックにプッシュします。これはすぐに実行され、ポップされます。
  3. setTimeout(2000)スタックにプッシュします。setTimeout(2000)ノードAPIです。それを呼び出すとき、イベントとコールバックのペアを登録します。イベントは2000ミリ秒待機し、コールバックが関数になります。
  4. APIに登録した後setTimeout(2000)、呼び出しスタックからポップされます。
  5. これで、2番目setTimeout(0)も同じ方法で登録されます。これで、2つのノードAPIが実行を待機しています。
  6. 0秒間待機した後setTimeout(0)、コールバックキューに移動し、同じことがsetTimeout(2000)。でも発生します。
  7. コールバックキューでは、一度に1つのステートメントしか実行できないため、関数はコールスタックが空になるのを待ちます。これは、イベントループによって処理されます。
  8. 最後console.log()が実行さmain()れ、はコールスタックからポップされます。
  9. イベントループは、コールスタックが空であり、コールバックキューが空ではないことを確認します。そのため、コールバックを(先入れ先出しの順序で)呼び出しスタックに移動して実行します。

npm

これらは、一般的な問題のほとんどを解決する素晴らしいコミュニティによって構築されたライブラリです。npm(ノードパッケージマネージャー)には、開発をより迅速かつ効率的にするためにアプリで使用できるパッケージがあります。

必要とする

Requireは3つ​​のことを行います。

  • Node.jsAPIからファイルシステムやHTTPなどのNode.jsにバンドルされているモジュールをロードします。
  • npmからインストールしたExpressやMongooseなどのサードパーティライブラリをロードします。
  • 独自のファイルを要求し、プロジェクトをモジュール化することができます。

Requireは関数であり、パラメータ「path」を受け入れてを返しますmodule.exports

ノードモジュール

Nodeモジュールは、その存在が他のコードに誤って影響を与えない、再利用可能なコードのブロックです。

独自のモジュールを作成して、さまざまなアプリケーションで使用できます。Node.jsには、追加インストールなしで使用できる一連の組み込みモジュールがあります。

V8はC ++を活用してJavaScriptをターボチャージします

V8は、C ++で記述されたオープンソースのランタイムエンジンです。

JavaScript-> V8(C ++)->マシンコード

V8は、ECMA-262で指定されているECMAScriptと呼ばれるスクリプトを実装します。ECMAScriptは、JavaScriptを標準化するためにEcmaInternationalによって作成されました。

V8はスタンドアロンで実行することも、任意のC ++アプリケーションに組み込むこともできます。JavaScriptで利用できるようにする独自のC ++コードを記述できるフックがあります。

これにより、基本的にV8をC ++コードに埋め込むことでJavaScriptに機能を追加できるため、C ++コードはECMAScript標準で指定されている以上のことを理解できます。

編集:Greg Bulmashが私の注意を引いたように、MozillaのSpiderMonkey、MicrosoftのChakraなど、ChromeのV8以外にも、さまざまなJavaScriptランタイムエンジンがあります。同じ詳細については、このページをご覧ください。

イベント

私たちのアプリで起こったことに対応することができます。Nodeには2つのタイプのイベントがあります。

  • システムイベント:libuvと呼ばれるライブラリのC ++コア。(たとえば、ファイルの読み取りを終了しました)。
  • カスタムイベント:JavaScriptコア。

Node.jsでHelloWorldを作成する

私たちはこれをしなければなりませんね?

app.jsファイルを作成し、それに以下を追加します。

console.log("Hello World!");

ノードターミナルを開き、ディレクトリをファイルが保存されているフォルダに変更して実行しnode app.jsます。

Bam —Node.jsでHelloWorldを作成しました。

@ Priyesh_p18をフォローする

freeCodeCamp.orgなど、Node.jsの詳細を学ぶために使用できるリソースはたくさんあります。