Node.jsは他のサーバー側フレームワークとどう違うのですか?


21

Node.jsが非常にポピュラーになったことに気付き、小規模なプロジェクトを実行している人々のインスタンスを見てきました。

また、長所と短所のリストを見て、Node.jsで何ができるかを理解しましたが、PHP、Perl、Rubyなどの他のより成熟したサーバー側の技術との違いについてはまだ明確ではありません。レール。

特に、Node.jsと現在の選択肢との違いは何ですか?その理由は何ですか?


1
@downvoter-なぜダウン投票なのか?2番目のパラグラフを除いて(他の誰かがそれを行ったのに、なぜもっとうまくやることができるのに、なぜ何かを始めるのか、本当に質問することはできません)、私はこの質問に興味をそそられます。私はこれを自分でよく考えました。
デビッドピーターマン

選ぶのはささいなことではありませんが、引用されたフレーズ 「node.js」でグーグル検索すると、約300万件のヒットが得られます。
ピーターローウェル

@ピーター、ええ、私はそれを試しました、そしてあなたは正しいです。しかし、300万はまだ2つです。1年後に戻ってくることができますが、この数値はおそらく最大1,000万件になります。:)
サイードネアマティ

3
@Mark、すばらしい編集に感謝します。より明確になりました。
サイードネアマティ

回答:


18

Node.jsを既存のサーバー側フレームワークと異なる2つの重要な要素、非同期イベント、およびプログラミング言語としてのJavaScriptの使用があります

非同期イベント

既存のサーバー側フレームワークのほとんどは同期アーキテクチャを使用していますが、Node.jsは非同期アーキテクチャを使用しており、JavaScriptはこれをうまく処理できます。これは、サーバーがイベントに反応し、イベント(メッセージ)をデータベースなどに送信することを意味します。このスタイルのプログラミングは同期スタイルとは非常に異なり、他の言語では使いにくい場合があります。Node.jsは、非同期IOを備えた非同期スタイルを採用しており、拡張性に優れています。

イベント駆動型アーキテクチャもご覧ください

JavaScript

JavaScriptは、Webアプリケーションがクライアントで使用しているプログラミング言語です。サーバー側で同じ言語を使用すると、開発者はクライアントとサーバーの両方でJavaScriptの知識を適用し、必要に応じて同じ機能を使用できます。

Ryan DahlによるNode.jsの紹介プレゼンテーションで、Node.jsのイベント駆動型アーキテクチャについて詳しく説明することをお勧めします。


2
これはこれまでのところ簡単に最良の答えですが、Node.jsがサーバーサイドフレームワークとして非常に魅力的であるので、私はAsynchromous Eventsを最初に置きました。ただし、非同期I / Oとスケーラビリティに言及して良い仕事をしました。それがその核心です。
アダムクロスランド

@Jonasさん、まだわかりません。ASP.NETもイベントベースです。それでは、Node.jsとASP.NETの違いは何ですか?非同期だからですか?その場合、ASP.NETでマルチスレッドを使用しても同じことができると思いますか?
サイードネアマティ

3
@Saeed:ASP.NETはスレッド化され同期されています。たとえば、データベースにアクセスするとき、スレッドはブロックされ、データベースからの応答を待機しています。また、多数のスレッド(たとえば、要求ごとに1つ)を使用する場合、大量のメモリが使用されます(各スレッドは非常に大量のメモリを必要とします)。Node.jsはメッセージを送信し、イベントに反応するので、スレッドを(できれば)ブロックすることはありません。node.jsでは、クライアント側と同じプログラミングモデルとAjax(非同期 JavaScriptおよびXML)、および同じ言語を使用しています。
ジョナス

あなたはその背後にある素晴らしいオープンソースコミュニティを忘れていました。
レイノス

3
C#5が新しいasyncものを持ち歩くとき、それは変わるかもしれません。問題は、他の言語でスケーラブルな非同期コードを書くことができないということではなく、適切な言語レベルのサポートなしでは(正しく)行うことがより難しいということです。
Davy8

6

そのイベント駆動型のため、その異なる。これにより、サーバーのスケーラビリティが向上します。

一言で言えば;

スレッドモデル

  1. クライアントが何かを求めます
  2. サーバーがオフになり、リクエストを処理します
  3. クライアントに返します
  4. 新しいリクエストを処理する準備ができました

イベントモデル

  1. クライアントが何かを求めます
  2. サーバーは処理のために要求を渡します。新しいリクエストを処理する準備ができました
  3. サーバーは、より多くのリクエストを処理します
  4. サーバーは、リクエストの処理が完了するとデータをクライアントに返します

@Tom、イベント駆動とはどういう意味ですか?ASP.NET WebFormsもイベント駆動型であり、Session_Startedor Context_AuthenticatedPage_Load?などのハンドラーを確認できます。
サイードネアマティ

1
イベント駆動型と呼ぶことは必要以上にあいまいであり、Node.JSの心臓部である非同期I / Oには実際には到達しません。
アダムクロスランド

2

人気はJavaScriptの使用によるものであるという印象を受けました。多くのWeb開発者はJavaScriptを知っているため、同じ言語を使用してサーバー側のコードを開発できるのがセールスポイントです。これには、私が考えることができるいくつかの利点があります。

  • サーバーとクライアント間でコードファイルを共有できるため、システムの両側を処理するだけで作業の重複を防ぐことができます。
  • 開発者は精神的に言語を切り替える必要はありません。(私の意見では大したことではない)
  • 設計者は、Webソリューションを設計するときに複数の言語を選択する必要はありません。
  • サーバー側コードを開発したことがない人は、別の言語を学習しなくても開発できるようになりました。(貴重な議論ではない可能性が高い、私見)

Node.JSは、高速で拡張性に優れているため人気があります。JavaScriptであることは素晴らしいことですが、大部分は偶然です。
アダムクロスランド

2
さらに重要なのは、サーバー側の開発者が同じ言語でクライアント側のコードを記述できること、およびサーバー側のモジュールをクライアントと共有できることです。その逆ではありません。ハッキングされたクライアント側のコードをサーバーに移植したくありません。
レイノス

@Adam:「高速で拡張性に優れた」説明に適合するテクノロジーがすでにあるのに、node.jsが人気を博しているのはなぜですか?-JavaScriptであるため。
ジョンフィッシャー

@John Node.jsでうまく拡張できないアプリを書くのはもっと難しいです。アプリがCPUを集中的に使用する(ほとんどの場合)よりもディスク/ネットワークを集中的に使用する場合、非常にトリッキーなスレッドコードを記述しない限り、他のほとんどのサーバーよりも多くの同時接続を単一コアで簡単にサポートできます。
Davy8

@ Davy8:使用した他のフレームワーク/システムにすべて依存していると思います。あなたが説明するスケーラビリティの容易さは、私が使用するツールで既に簡単です。私の観点からNode.jsが提供する唯一のものは、JavaScriptフレーバーです。
ジョンフィッシャー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.