Node.jsのユニークな点は何ですか?[閉まっている]


48

最近、Node.jsに対して多くの賞賛が寄せられています。私は、ネットワークアプリケーションにさらされている開発者ではありません。Nodes.jsの私の理解から、その強みは次のとおりです。複数の接続を処理するスレッドが1つしかないため、イベントベースのアーキテクチャを提供します。

ただし、たとえばJavaでは、NIO / AIO(私の知る限りの非ブロッキングAPI)を使用して1つのスレッドのみを作成し、そのスレッドを使用して複数の接続を処理し、データを実装するイベントベースのアーキテクチャを提供できます処理ロジック(コールバックなどを提供することでそれほど難しくないはずです)?

JVMはV8よりもさらに成熟したVMであり(より高速に実行されると思います)、イベントベースの処理アーキテクチャは作成するのが難しくないように思えますが、Node.jsがそれほど注目されている理由はわかりません。重要なポイントを見逃しましたか?


3
なぜそれがダウン投票されているのだろうか...この質問はプログラミングの議論であると思うので、私はstackoverflowには入れませんでした。同様のトピックも検索しようとしましたが、Nodes.jsの強さに関する情報しか見つかりませんでしたが、問題は「強度」がなぜそれほどユニークなのか理解できない(まだ見つけられない)
Adrian Shum

6
そのパターンをJavaで実装してみてください。もちろん機能します。しかし、あなたは一つのことを見るでしょう:それはJavaで非常に非常に冗長になります:あなたはほとんど常に新しいクラスを作成することを意味する大量のコールバックを必要とします。これはちょっとしたちょっとした選択のように聞こえるかもしれませんが、大きなプログラムでは非常にquicklyくて扱いにくいものになります。
ヨアヒムザウアー

6
Javascriptコールバックは、扱いにくくなる傾向があります。このようなスパゲッティは、Javascript IMOよりもJavaでデバッグおよびリファクタリングする方がはるかに簡単です。
ファンキーブロ

5
@AdrianShum:スラッシュドット効果で、グループの考え方に合わないものはすべて-でMicrosoftを賞賛するように-投票されます。
gbjbaanb

3
誇大広告に言及している人がいないことに驚いています。
deadalnix

回答:


33

実際、この概念は多くの言語で実装できます(また、dodgy_coderで述べたように、少なくともRubyとPythonで実装されています)が、あなたが言うほど簡単ではありません。

確かに、Javaには非ブロッキングIO APIがあります。したがって、非ブロッキング方法でrawディスク/ネットワークIOを実行できます。ただし、何らかの方法でIOをラップまたは処理するすべてのAPI は、非ブロック方式でも実装する必要があります。非ブロッキングIOをサポートするには、すべてのXMLパーサー、すべてのデータベースドライバー、すべてのファイル形式コンバーターを記述する必要があります。単一のライブラリがこのパターンでブロックしている場合、サーバーのパフォーマンスが石器時代の値に低下するためです。

それは常にそのように設計されたため、Node.jsのは、そのライブラリのインフラを持っています努めておりますが、人気になるためにすることを、すべてのライブラリがあり、非同期APIを提供するために、または、それは使用されません。


18
うん。言い換えれば、Node.jsの最も重要な強みはECMAScriptの最も重要な弱点であり、信じられないほどくだらないECMAScript標準ライブラリです。とにかくNode.js開発者はすべてのホイールを再発明しなければならなかったため、正しい方法で再発明する機会がありました。
ヨルグWミットタグ

4
私が知っている限りでは、ECMAScriptは常に組み込み言語として設計されていたため、あらゆる種類のOSレベルのAPIは必要ありませんでした(ネットワークIOでさえもほとんど抽象化されていました)。その欠如は、確かにNode.jsの利点でした。
ヨアヒムザウアー

「ポピュラーになろうとするすべてのライブラリは、非同期APIを提供する必要があります。そうしないと、使用されなくなります」と私はまさに探しているものだと思います。Node.jsでXML解析やDBアクセスなどの非同期APIがどのように提供されるかについて調べるリソースはありますか?
エイドリアンシャム

1
一般に@AdrianShumは、イベント駆動型のプログラミング例を探します。特定の実装は多くの言語で見つけることができます。Node.jsモジュールの他に、PythonのTwistedの例、twistedmatrix.com / trac / wiki、PerlのPOEの例、poe.perl.org、RubyにはEventMachine、github.com
eventmachine /

19

おそらく主な理由は、JavaScriptを使用して、Webサーバー、Webアプリケーション、Webサービスなどのサーバー側コンポーネントを作成することです。これにより、従来のフロントエンド(クライアント側)開発言語JavaScriptとサーバー側言語が統合されます。

あなたが正しい-それがノンブロッキングであり、reactorパターンを使用するということはユニークではありません-他の言語やフレームワーク、例えばRubyのEventMachineやPythonのTwistedを使用する前に行われました。


5
非常にいくつかの技術が真にユニークな機能を持って、独自性は、すべての機能の彼らの特定の組み合わせから来ている
JK。

1
合意された、ここではすべての主要な言語でそれをサポートしているライブラリの一覧があります... Wikipediaの原子炉パターン
dodgy_coder

10

私があげる3つの主な理由は次のとおりです。

  1. ノンブロッキングIO /非同期IO。これは、ウェブ上のどこでも、以前のポスターでもハッシュ化されています。私が貢献することの1つは、非同期動作を明示的に想定するようにコードを設計すると、コンパイラエンジンがハードウェアを最大化するのに役立つことです。はい、多くのJITコンパイラとハイパースレッディングプロセッサは同期コードを使用して、実行の並列化を支援します。もちろんこれはベストエフォート型のアプローチです。対照的に、非同期io用のアプリケーションを明示的に構築すると、エンジンとハードウェアがコードの実行時間を最大化できるようになります。確かに、私はこれを証明する定量化可能なデータを持っていませんが、このように考えると心が温かくなります。

  2. クライアントとサーバーの単一コードベース。これには多くの利点があります。ビジネスロジックをサーバーからクライアントに移動できるため、データセンターのコストを最適化できます。ビジネスロジック/データ検証の再利用を支援します。製品をサポートするために存在する必要がある開発者のスキルの複雑さを軽減します(対Python&javascript)。

  3. 参入障壁が低い。多くの点で、Javascirptは、昨年のBasic、Pascal、Perlに似ています。コードの記述を開始するのは非常に簡単であり、ドメインの知識をあまり必要としません。また、これにより、より多くのjr開発者を引き込むことができ、プロジェクトに投入できるため、開発コストを削減できます。[もちろん、低機能の開発者を排除するためには、プログラミング言語は難しいと考えているイデオローグを乗り越える必要があります]


jrだけでNodeチームを構築することをお勧めするかどうかはわかりません。JS開発者。アーキテクチャは、jrグレードのWeb / UIプロジェクトで考える必要のあるものではありません。JSは、結果を比較的得ることができたとしても、他の言語と同様に、長期にわたって構築する上で本当に得意とするのに時間がかかります一般的なプロジェクトよりも複雑度の低いプロジェクトで、低レベルの経験で迅速に。
エリックReppen 14

@ErikReppenに同意します。(言語に関係なく)完全にジュニア開発者の建築チームは、椅子、テーブル、犬小屋の構築に長けている大工を完全に使用して家を設計および構築するようなものです。
ワイルドカード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.