Một runtime environment cho Javascript

NodeJs

Một runtime environment cho Javascript

NodeJs cho phép bạn chạy javascript ngoài trình duyệt web. Nó được xây dựng dựa trên JavaScript Engine của Chrome, V8, và cho phép bạn sử dụng JavaScript để viết các ứng dụng server-side, API, microservice, và nhiều tác vụ khác.

Home

NodeJS とは何ですか?

 
 

Node.js は JavaScript ランタイム上に構築されています。それは素晴らしいことですが、具体的にどういう意味でしょうか?どのように動作するのでしょうか?

Node ランタイムプラットフォームには、JavaScript で書かれたプログラムを実行するために必要なすべてのものが含まれています。

Nếu bạn đã biết Java là gì, thì định nghĩa Node.js là gì cũng có một số điểm giống nhau.

 

 

もし Java について知っているなら、Node.js の定義にはいくつかの共通点があります。

Node.jsV8 JavaScript エンジン 上に構築されたプラットフォームであり、C++ と JavaScript で書かれています。このプラットフォームは、Ryan Lienhart Dahl によって 2009 年に開発されました。

Node.js は、初期の JavaScript 開発者が、もともと ブラウザ上でのみ動作するもの だった JavaScript を、独立したアプリケーションとして PC 上で動作させる ことができるように拡張したことによって誕生しました。

これにより、JavaScript は ウェブサイトとのやり取り以外 にも多くのことができるようになりました。

なぜ Node.js なのか?

これは、Node.js の公式サイト に掲載されている定義です。

最初の部分については既に理解しているので、次の部分を見てみましょう。

I/O(入力/出力)とは?

I/O(Input/Output) とは、ファイルの読み書きや API への HTTP リクエストなど、データの入出力に関する処理のことを指します。

I/O 操作は時間がかかるため、他の処理をブロック(妨げる)する可能性があります

たとえば、user1 と user2 のデータを取得して画面に表示する 場面を考えてみましょう。
この処理には時間がかかりますが、本来 両方のデータ取得は同時に実行できるはず です。

 
Blocking I/O (trái) và Non-Blocking I/O (phải)

 

ブロッキング I/O(Blocking I/O)

ブロッキング処理 では、user1 のデータが画面に表示されるまで user2 のデータ取得は開始されません

もしこれが ウェブサーバー だった場合、新しいユーザーごとに 新しいスレッド(Thread) を開始しなければなりません。
しかし、JavaScript はシングルスレッド(1 つの処理が終わるまで次の処理を開始できない) なので、この方法は適していません。

ここで ノンブロッキング I/O(Non-blocking I/O) の登場です。

ノンブロッキング I/O(Non-Blocking I/O)

ノンブロッキング処理 を使用すると、user2 のデータ取得を user1 の処理を待たずに開始できます
つまり、両方のリクエストを並行して処理することができます

これにより、複数のリクエストを同時に処理できるため、マルチスレッドの必要がなくなります

JavaScript のイベントループ(Event Loop)

以下は、JavaScript のイベントループ がどのように動作するかを簡単に説明したものです。

 

npm

 

npm とは、Node.js のパッケージ管理システムであり、多くの ライブラリ を提供しています。
これらのライブラリを活用することで、アプリケーションの開発を より速く、より効率的に 行うことができます。

Require(モジュールの読み込み)

require には 3 つの役割 があります。

  • Node.js に組み込まれているモジュールfshttp など)を読み込む。
  • npm からインストールしたサードパーティのライブラリ(Express, Mongoose など)を読み込む。
  • 独自のファイルやモジュールを読み込み、プロジェクトをモジュール化する

require は、指定されたパスのモジュールを読み込み、module.exports を返します。

Node.js のモジュール(Node Modules)

Node モジュール とは、再利用可能なコードのブロック です。
モジュールを作成すれば、異なるアプリケーションでも簡単に再利用 できます。

また、Node.js には組み込みのモジュール があり、追加のインストールなしで使用できます。

V8 エンジンと JavaScript の高速

V8 は、Google が開発したオープンソースの JavaScript エンジン であり、C++ で書かれています

JavaScript → V8(C++)Machine Code(機械語)

V8 は、ECMA International によって定められた ECMAScript(ECMA-262) の仕様に従って動作します。

この仕組みにより、V8 を C++ コードに組み込むことで、C++ が JavaScript を理解しやすくなる という利点があります。

P.S.: Greg Bulmash 氏によると、V8 以外にも Mozilla の SpiderMonkeyMicrosoft の Chakra など、他の JavaScript エンジンも存在します。

イベント(Events)

Node.js では、アプリケーション内で発生するイベントを処理することができます。
イベントには、以下の 2 種類 があります。

  • イベントシステム(C++)libuv というライブラリを使用(例:ファイルの読み取りが完了したとき)。
  • カスタムイベント(JavaScript) – JavaScript で独自に定義したイベント。

Node.js で「Hello World」を書いてみよう

試しに、Node.js で "Hello World" を表示 してみましょう。

手順

app.js という名前のファイルを作成し、以下のコードを追加します。

console.log("Hello World!");

ターミナルを開き、ファイルのあるフォルダに移動して、次のコマンドを実行します。

"Hello World!" と表示されれば成功です!