web-dev-qa-db-ja.com

node.jsとTornadoの違い

Node.jsがJSで、TornadoがPythonで記述されているという事実に加えて、2つの違いは何ですか?どちらもノンブロッキング非同期Webサーバーですよね?言語のほかに一方を選択するのはなぜですか?

77
coffee-grinder

Node.jsの主な利点は、すべてのライブラリがasyncであるため、ブロッキングについてあまり心配する必要がないことです。 mysql、postgres、redisなどの非同期ライブラリがあります。デフォルトではすべて非同期です。

Pythonにはすべてのライブラリがありますが、これらのライブラリのほとんどは非同期ではありません。竜巻を利用するには(プロセスをブロックしないように)特別なライブラリが必要です(たとえば、「pip install redis」を使用して使用するだけでは、 brukva のようなものが必要になります) )、およびnode.jsライブラリよりも竜巻ライブラリがはるかに少なくなっています。たとえば、現時点では非同期mysqlトルネードドライバーは使用できません(または、少なくとも私はそれを認識していません)。

ただし、トルネード(I/Oを実行しないもの)で多くのpythonライブラリを使用することができ、トルネードコミュニティはギャップを拡大して埋めています。

私の経験では、竜巻を使用するよりもnode.jsを使用してアプリを作成する方が簡単です。 pythonプロジェクトの既存のインフラストラクチャによりよく適合するため、node.jsからtornadoに個人的に切り替えました(htmlページを提供するDjangoサイトとリアルタイム機能を提供するtornadoサーバーの統合は非常に簡単でした) 。

96
Mikhail Korobov

Rich Bradshawが指摘しているようにNode.jsはJSで記述されているため、フロントエンドとバックエンドを同じ言語で維持し、場合によっては共有することができますいくつかのコードベース。私にとって、これはNode.jsの大きな潜在的な利点です。 Nodeには、さらに多くの非同期ライブラリが付属しています。

V8はJSをPython 少なくともベンチマークが示唆しているように見える )よりも高速にする必要がありますが、両方 Node.jsおよびTornado(および他のほとんどのWebフレームワーク)は、ネイティブライブラリのラッパーを使用します。 Python標準ライブラリはCで記述されているか、潜在的な違いをさらに軽減する、より高速な代替物に置き換えることができます。

Webサービスは通常I/Oにバインドされているため、データを処理せずにデータストアを待機することに時間を費やしています。そのため、JSとPythonの間の合成速度の違いは、多くのアプリケーションでは無関係です。

13
Morten Jensen

node.jsはアセンブリコードにコンパイルされるV8を使用しますが、tornadoはまだそれを行いません。

それ以外(実際には速度に大きな違いはないようです)、それはエコシステムです。 JSのイベントモデルを好みますか、またはPythonが機能しますか?PythonまたはJSライブラリを使用して幸せですか

10
Rich Bradshaw

Nodejsには、Socket.ioと呼ばれるwebsocketのシームレスな統合/実装もあります。ソケット-イベントをサポートするブラウザーを処理し、古いブラウザーとの後方ポーリング互換性も備えています。通知フレームワークまたは同様のイベントベースのプログラミングを必要とする開発では非常に迅速です。

3
Sushant Khurana