質問: (勉強を始めたばかりなので勘違いや誤りがあったらすみません) --- **[追記]** 皆さん回答、ありがとうございます。 自分が聞きたいことと自分の質問内容の間にギャップがあるように感じたので追記します。 例えば、 「Apacheはアーキテクチャ的に大量のリクエストを処理するのに限界がありそうだ」 「nginxはApacheとは異なるアーキテクチャを採用していて大量のリクエストをさばけるらしいぞ」 ↓ ApacheからNginxへ乗り換え とApacheに不満があるからnginxへ乗り換えるというケースがあると思います。 Node.jsのサーバーとしての処理に何か不満があったとして、その場合に乗り換えられる別の何かは存在するのでしょうか? --- **以前の質問** 最近、Node.jsの勉強を始めました。 サーバーサイドの処理をJSで記述ができることが特徴で、Node.jsがそのスクリプトを実行することまではわかりました。 実際に起動する場合「node foo.js」のようにコマンドを打つとサーバープロセスが起動します。 ここで一つ疑問に思ったのは、「サーバーサイドJSを動かせるサーバー(?)はNode.jsしかないのか」ということです。 例えば、HTTPサーバーであればApacheやNginxという選択肢があります。 Node.jsも同様にApacheやNginxなどのような選択肢があるのでしょうか? それとも、Node.jsでしか動かせないのでしょうか? もしそうであれば、Node.jsはサーバーアプリケーションとしては優秀なのでしょうか? (個人的には「python -m SimpleHTTPServer 8080」みたいに立てた簡易サーバー程度のパフォーマンスしか出ないんじゃないのかなあと邪推しています)
回答: `JavaScript`の実行環境という意味であれば、`Node.js`じゃなくてもたくさんあります。 例えばJVMにはRhinoと呼ばれる実行基盤と`Nashorn`と呼ばれるJavaScriptパーサーが存在します。これはJavaから起動します。 Node.jsのAPI実行環境をJVMで実装し直してNode.jsと同じAPIが動くようにした`nodyn`っていうのも存在します。 他にもGolangに`otto`と呼ばれるJavaScriptインタープリターがあります。 nginxにはnginScriptと呼ばれるJavaScriptを実行できる機能が存在します。 このようにJavaScriptを特定の環境で動かしたいのであればいろんな選択肢・やり方は存在します。 > > Node.jsはサーバーアプリケーションとしては優秀なのでしょうか? > > > 何を持って優秀とするかは色んな評価軸があるので難しいです。 Node.jsが向くのは多くのWebアプリケーションをはじめとして、大量で同時に接続するクライアントが多く、そこまでのCPUリソースを必要としない処理に向きます。こういうアプリケーションにとっては有利です。 そうではなく、「絶対落ちてはいけないアプリケーション」とかは向きません。また「CPU使用率が高い事をやるアプリケーション」とかは向きません。 Apacheやnginxが得意とする所にNode.jsを置くのは得策ではないです。その裏にあるアプリケーションサーバとして実行する方が普通です。 「pythonのhttpサーバを起動したときと同程度のパフォーマンス」という記述がありますが、Node.jsは単純なhttpサーバであればpythonよりは高速に動きます。**ただしこれもNodeとPythonでは向き不向きがあるので一概に比較できるものではないです。** > > Node.jsのサーバーとしての処理に何か不満があったとして、その場合に乗り換えられる別の何かは存在するのでしょうか? > > > もちろん存在します。例えばjx-coreと呼ばれる処理系もあり、その処理系はnode.jsが不得手とするスレッド型の処理ができるようになるための別な処理系です。この他にも前述したnodynはJVMでできているのでJVMの処理系の運用に強い人達向けのものです。 ただし、この疑問を持っているということは「サーバサイドJS」で検索した時にnode.js以外の情報が出てこなかったからその疑問を感じたのではないかと思います。 その疑問はある程度本質をついています。つまり、 * まともに動作し、 * エコシステムが盛りあがっており、 * LTSなどで長期保証がちゃんと行われている こういった性質があるサーバサイドJSは今のところNode.jsしかありません。ただそれは競合と比較して頭一つ抜けているだけで代替手段がない訳ではありません。 Apacheとnginxの話は割りと拮抗している競合同士なのでたまたま代替手段として2つが確立しているかのように見えますが、こういう風に拮抗している競合があるのは割りと広い分野のモノに限られると思います(例: データベースでいうならMySQLとPostgreSQL等)。 サーバサイドJSっていう分野がかなりニッチな所なので競合は居てもNode.jsの代替としてライバルになれる程の存在は今はいません。 ただ重要なのはライバルがいない事と代替手段がない事は別です。どんな処理系にも大体において別な処理系が存在します。 繰り返しになりますが、そもそもの質問に回答すると、『サーバサイドJSにおいては現在のデファクトスタンダードはNode.jsになっていますが、もちろん別な手段もあります。』です。