|
ichath_2

Node.jsが今アツい!?~開発初心者向け~ その2

前回は「Node.js」とは何かについてお話しました。
その2では、Node.jsのメリット・デメリットについてご紹介いたします。

④Node.jsを使うメリットとは??

これまで、Node.jsとは何かを述べましたが、結局何がいいのでしょうか?そちらを2点あげました。

⑴GoogleのV8エンジン
googleのCromeも同じエンジンを搭載しており、処理速度が速いのが特徴ですよね。
また、Googleのエンジンともなると日々アップデートされるので、最新で最速のエンジンを搭載できることになると思います。以下のグラフによると、CやJavaには劣りますが、PHPよりもパフォーマンスがいいようですね。

Node.jsのパフォーマンス比較image_01

⑵イベントループとノンブロッキングI/O
エンジン以外にも、リクエストの処理の仕方に特徴があります。Node.jsはシングルスレッドベースの非同期処理環境なのです。ノンブロッキング(非同期)というと、サーバーサイド側のマルチスレッドによる処理を想像しますよね。まず、イベントループを採用していないApacheについて説明します。

Apacheはマルチスレッドベースで動作するアーキテクチャです。クライアントからのリクエストごとにスレッドを作成するので、その際にメモリもその分だけ確保されてしまいます。同時接続するクライアントの数に比例して使用するメモリ量も増えてしまいます。一気にアクセスが集中したとき、なかなかサイトに飛べないことがありますよね。その場合、マルチスレッドベースで処理しているなどが考えられます。

シングルスレッドベースでどのようにして素早く多量のリクエストを捌くのでしょうか。まず、ノンブロッキングI/Oという特徴があります。データの送受信(I/O)の完了を待たずに、他の処理を開始することになります。非同期で、処理が並列に実行されるため、ある処理の完了を待ってから次の処理を行いたい場合「コールバック」を使用します。

ここで、活躍するのがイベントループの機能です。イベントループではイベント(ダウンロードやクリックなどのリクエスト)が発生したタイミングで「コールバック」で呼び出される仕組みのことです。イベントループでは、まずクエリーと呼ばれるイベントを受け入れる箱のようなものがあります。このイベントループを使用すれば、スレッドは一つで済むため、メモリの使用率はクライアント数には比例しないのです。

イベントループは処理をノンブロッキングI/Oにしなければいけません。もし、ブロックしてしまったとしたら、イベントループ全体の処理が止まってしまうのです。実際、イベントループを採用している「Twisted」(Python製)、「Event Machine」(Ruby製)などいろいろありますが、PythonやRubyを使う場合、ブロックしないか注意が必要になります。その点、Node.jsはJavaScriptを採用しています。マルチスレッドやブロッキングI/OをJS自体が持っていないので、相性がいいですよね。

naveでNode.jsのバージョン管理&イベントループ詳説

⑤Node.jsを使うデメリットは?

処理が速く、扱いも簡単そうなNode.jsですが、デメリットは何でしょうか?2点紹介します。

⑴Node.jsに対応するサーバーを利用する必要がある。
国内にあるレンタルサーバーでは使えなかったり、レスポンスが遅かったりするみたいです。海外のサーバーを使うにしても、英語がネックになってしまうかもしれないですね。

node.jsが使えるレンタルサーバー比較

⑵サーバーへNode.jsを設定する必要がある
PHP や Ruby、Java などのバックエンド言語はレンタルサーバーにすでにセットされていますが、Node.js は自分でセットアップする必要があります。サーバープログラムを自ら構築していきます。サーバープログラムを構築したことがない方には少しハードルが高いかもしれません。

⑥Node.jsの実例集

ここで実際にNode.jsが使われた事例を紹介したいと思います。

LinkedIn での Ruby on Rails 対 Node.js
PayPal社がバックエンドをJavaからJavaScriptへ移行
Node.js Cluster+Socket.IO+Redisによるリアルタイム通知システム

まとめ
Node.jsについて参考になったでしょうか??実際にNode.jsを勉強するのは少し大変かもしれませんが、大手企業が採用しているところを見ると、機能面で有効なのかもしれません。また、自らCMSを構築し、ECサイトを一から開発できるかもしれません。ぜひ、挑戦してみてください!!

シェアする