Part1:Node.jsって何?

海未「では始めに基礎知識として、そもそもNode.jsとは何なのかについて整理してみたいと思います」

海未「Node.jsはサーバサイドJavaScriptと呼ばれるものです。言語としてJavaScriptを利用するサーバプラットフォームですね」
ことり「言語の名前、じゃないんだよね。ライブラリ、でもないのかな」
海未「ライブラリというかモジュールは色々用意されていますが、本質的には実行環境というのが近いでしょうか」

海未「Node.jsの持つ特徴として、以下のようなものが挙げられます」

  • ノンブロッキングI/O
  • シングルスレッド
  • イベントループ

海未「個々の詳細はこれから先に進むにつれ見えてくると思いますから、ここでは概要を掴んでください」

海未「ノンブロッキングI/Oというのは、ファイルやDB、ネットワークなどの遅い入出力を行う際に、相手方の処理完了を待たないということです」
穂乃果「あれ、それだと読み込むときとか結果はどうするの?」
海未「そこでコールバック関数やイベントループです。I/O処理が終わったら特定の関数を呼び出すようにしておいて、そこで結果を受け取るのです」
穂乃果「お仕事丸投げ、結果だけ持ってこーい!」

海未「Node.jsではアプリケーションはシングルスレッドで動きます」
ことり「シングルスレッド?」
海未「Apacheなど一般的なWebサーバは、リクエストが来るたびに新しいスレッドを作って、そこで処理を行います。リクエストの数だけ窓口を用意するようなものですね」
ことり「物販列が伸びそうなら窓口増やすよね」
海未「ですが、窓口を増やすにも限りがあります。サーバで使えるメモリは有限ということです」
ことり「うーん、それもそうだね」
海未「その代わりにNode.jsはイベントループというモデルを採用しています。リクエストやコールバックをイベントとしてキューに入れていき、1つのスレッドで処理していくのです」
穂乃果「それで、どうして効率よくなるの?」
海未「ノンブロッキングI/Oにより個々のイベント内での待ちがなくなり処理時間が短くなりますから、外部で遅いI/O処理が行われている間にも次のイベントを処理していけるのです」
穂乃果「できる処理からどんどんやっちゃえー、みたいな感じ?」
海未「そうですね。実際、リクエストの到達順と処理順は一致しないこともあるようですから」

海未「これらの特徴を活用することで、大量のリクエストを高速に処理できるようになります」
ことり「オンラインゲームを落とさない技術、だね」
海未「リリース直後のオンラインゲームやECサイトのタイムセールはモデルケースだと思います」
ことり「フィルムコマ配布期間中の木曜午前0時とか」
海未「TOHOシネマズは毎週数千人待ちでしたがイオンシネマはわりとスムーズに取れましたよ」
穂乃果「ラブライブ!のnews鯖も燃料が出るとよく落ちるよね」
海未「μ’sもAqoursもこれだけ有名になってきたのですから、あれはそろそろ改善してほしいものです・・・」

海未「向き不向きですが、ゲームやチャットなどのリアルタイム性が求められるアプリケーションや、1ページ内で完結するシングルページアプリケーションに向いていると言われています」
穂乃果「ちょっと特殊用途が多いのかな?」
海未「DB入出力をWebでやる類のアプリケーションであれば、現状Node.jsよりもRailsやDjangoなど既存のフレームワークの方が優れていると思いますから、そのあたりは使い分けですね」

海未「さあ、座学はこのくらいでいいでしょう。次回は環境構築をしてみたいと思います」


海未「ことり」
ことり「どうしたの?海未ちゃん」
海未「私のイベントが終わりましたが・・・」
ことり「・・・うん。ごめんね、海未ちゃん」
海未(これでSR海未を取れていなければ、今後の追求も少しは・・・)
ことり「”2枚しか”取れなかったの。ほんとにごめんね」
海未「・・・っ」
ことり「次は絶対3枚取るから・・・ね?海未ちゃんも」
海未「・・・やはり、ことりには、敵いませんね」


LINEで送る
Pocket


返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です