Node.jsとは
サーバーサイドのJavascript実行環境である。
PHP、Ruby、Python、Java等の言語と同様に、サーバー側で動作するJavaScript。
Google Chromeに搭載されたJSエンジンV8をサーバーで実行できるようにしたというイメージ。
V8の処理は、他のPHP/Perl/Ruby/Pythonなどのスクリプト言語の処理エンジンよりも速い。
Node.jsでできること
サーバーサイドアプリケーション
- Webアプリ
- Node.js + Express
クライアントサイドアプリケーション
- Visual Studio Code
- GitHub Decktop
- Slack
などが利用例である。
Node.js + Electron
- IoT
- Node.js + Raspberry Pi
- Node.js + Raspberry Pi
Node.jsの特徴
シングルスレッド
ノンブロッキングI/O(非同期処理)
イベントループ
シングルスレッド
プログラムの処理単位を表す用語。
一連の処理を一つずつ順番に行う。
他にマルチスレッドがある。
複数の処理を並行して行う。
ノンブロッキングI/O
シングルスレッドで複数の処理を捌く為の仕組みがノンブロッキングI/Oである。
データの送受信(I/O)を待たず(ノンブロック)並行して処理を行う。
マルチスレッドでも並行処理が可能だが、この場合リクエストの度にThreadという処理が発生する。
Threadにはメモリを消費する為、限界を超える大量のリクエストを捌き切れなくなってしまう。
このことをC10K問題(クライアント1万台問題)という
イベントループ
リクエストやコールバックをイベントとして扱い、
そのイベントに関する処理が終わった際に次のイベントを処理する仕組みのこと。
他にスレッドモデルがある。
スレッドモデルはスレッドが増えるほどメモリを消費するが。
イベントループはシングルスレッドの為、メモリの消費は少ない。
Node.jsのメリット
サーバーからクライアントまで1言語で記述できる
- 学習コストが低い
C10K問題に対応できる
活発なコミュニティーサポート
ライブラリが豊富
Node.jsのデメリット
- Node.jsとフロントエンドのJavaScriptには、同じJavaScriptでも処理上の互換性がない。
- Node.jsに対応しているサーバが少ない(VPS(仮想プライベートサーバ)などを利用してインストールする必要がある)
まとめ
Node.jsはノンブロッキングI/O、イベントループの仕組みにより軽量で効率的に多くの処理を捌くことができる。
サーバーサイドからクライアントサイドまでJavascriptのみでサービスを作れる。