非リアルタイムWebアプリのnode.jsを避ける正当な理由はありますか?


29

Node.jsがリアルタイムWebアプリにどれほど優れているか、ソケット、Comet、AJAXの重い通信などを必要とするものについて、多くの話を見てきました。イベント駆動、非同期、スレッド駆動のモデルは、オーバーヘッドの少ない同時実行にも適していることを知っています。

また、Node.jsのチュートリアルでは、より単純で「伝統的な」非リアルタイムアプリ(たとえば、アプリ開発を学ぶ人にとって標準的な「Hello World」と思われる標準的なブログの例)を見ました。また、node-staticを使用すると、静的アセットを提供できることも知っています。

私の質問は次のとおりです。クラシファイド、フォーラム、前述のブログの例、または社内ビジネスアプリケーション用に作成するCRUDアプリなど、従来のWebアプリでNode.jsを使用しない理由はありますか。ファンキーなリアルタイムのものに優れているからといって、より安定した使用を禁じているのでしょうか?

私が考えることができるのは、最初のうちは、成熟したライブラリの不足です(ただし、変化しています)。

(私が求めている理由は、ほとんどの言語の切り替えのインピーダンス不整合を乗り越えるために、私はNode.jsのためにPHPを捨てる検討しているということですが、また、私は検証コードやその他もろもろを再利用することができるように。私の超自我のために私を訓戒選びます仕事に最適なツールですが、包括的な兵器庫を得るために15の言語とそのすべてのユーザーランドライブラリを学ぶ時間はあまりありません。また、Node.jsがPHP /将来的には、大量のトラフィックについて考え始めなければならないApache。

[編集]これまでの回答に感謝します。答えを選択する前に、他の誰かが体重を測定するかどうかを見たいだけです。@Raynosからの回答は私が考えていることを確認し、コメンターからのリンクは思考のための良い食べ物を提供しましたが、「ノードXを問題に使用しないでください」など、ノード固有の回答があるかどうかを確認したいです'。(CPUの高いタスクに加えて、私はすでにそれを知っています:-)


1
@ default.kramer:リンクをありがとう、本当に楽しかった!
ザック

1
うわー!むしろ意見を述べたチャップ、え?フォローアップ記事で、彼は、高I / Oおよび低CPUアプリケーションの場合、イベントシステムとスレッドシステムはおおよそ同等であり、いつ問題が発生するのかわからない初心者プログラマーに問題があると言っているようです。イベントを放棄し、新しいスレッドを生成します。しかし、プログラマーの無知は、ツールが悪いことを意味しませんか?CPUを集中的に使用するタスクのイベントループである環境を使用することは少し奇妙ですが、それは悪ですか?
ポールd'Aoust

1
彼のJavaScriptへの憎しみも重要な問題であるように思われます。
ポールd'Aoust

@ポール-あなたはおそらく塩の粒でそれを取る必要があります。Node.jsについてあまり知りません。ユーモラスだと思った。(彼の文章のほとんどのように)
default.kramer

@ default.kramerのリマインダーに感謝します。私は人々の意見を福音としてとる傾向があります。彼の主要な有効な批判は、CPU集中型のタスクにNode.jsを使用すべきではないということです。彼のワーカープロセスに対する批判について混乱しています。特定のタスク用に個別のワーカーを作成することに大きな問題はありますか?
ポールd'Aoust

回答:


13

従来のWebアプリのNode.jsを避ける正当な理由はありますか

はい、WebプラットフォームXでN年間を使用している場合、プラットフォームXでアプリケーションをより迅速に開発できます。

Yを実行したい場合、プラットフォームXにはXを実行する既成のソリューションYがあります。

あるプラットフォームを別のプラットフォームよりも使用する理由のすべての一般的な理由。

内部ビジネスアプリケーション用に作成するCRUDアプリのようなものですか?

はい、汎用アプリケーションをより速く書くことができる他のプラットフォームがあります。Rubyon Railsが思い浮かびます。

しかし、それは言った。私はノードの経験があり、ノードの代わりに大量の機能を実行しない限り、ノードよりも別のプラットフォームを選択すると主張することはできません。

基本的にそれはの単純な質問です

これをすべて行うツールが存在しますか?いいえ、ツールを作成するのに最も便利なプラットフォームを選択してください。

node.jsが不便なプラットフォームである理由はありません(「iはJavaScriptが嫌い」)


ですから、親しみやすさ、ライブラリの利用可能性などの実用的な原則は、特定のプラットフォームにとって強力な議論だと思いますか?これらは良い考えであり、間違いなく私が検討しているものです。(
すぐに使える

@ Paul'Aoust私はロール・ユア・オウン・オア・ガイ・ガイです。しかし、何もせず、締め切りもありません。
レイノス

へえ、警告をありがとう。node.jsチャットで、他の人のモデルライブラリ(Backbone.jsなど)を使用し、Backbone.jsを学習するのに時間がかかりすぎて、JavaScriptを利用する(そして学習する)だけの時間が足りないことに気付いたプロトタイプ継承メカニズム。いいアドバイス; 今はもっとリラックスできます。
ポールd'Aoust

4
-1あいまい。1)XのN年の経験があるからといって、Node.JSを避ける​​べきという意味ではありません。経験に基づいて意図的な無知を提案していますか?そして、「一般的な理由」とは何ですか?2)「一般的なアプリケーションをより速く記述できる他のアプリケーション」-純粋に主観的です。3)「私は* JavaScriptを憎む*」以外の*は、」 -また、主観的かつ繁栄技術を回避するためではない正当な理由である*スペル。。
ジャック・ストーン

@ClintNashあなたの理由のいくつかは彼と違いはありません。「人的資源」と「N年の経験」はまったく同じです。「NodeJSは従来のフレームワークほど成熟していません」対「はい、汎用アプリケーションをより速く書くことができる他のプラットフォームがあります。Rubyon Railsが思い浮かびます。」も同じです。それらは同じであるだけでなく、あなたのものは彼よりも測定可能な(客観的)ものではありません。
aaaaaa

6

ノードで数週間作業した後、私はイエスと言います、それはとてもクールです。ただし、従来のWebアプリを置き換えるために使用するものである必要はありません。

ノードは独自のサーバーです。これは、node.jsアプリケーションを1つ以上実行したい場合に複雑さをもたらします。つまり、マシンでホストされているサイト/ドメインが複数ある場合。LAMPスタックとは異なり、同じサーバー(少なくともポート80)で実行されている、半ダースの異なるドメイン用のダースPHPアプリケーションを使用できます。おそらくそれを可能にするノード用のフレームワークがありますが、それは従来のWebプラットフォームにこだわる場合に必要な複雑さを追加するだけです。(もちろん、Webサーバーをノードの前に置くことでプロキシを設定することもできますが、そのようなことはノードを使用する利点を無効にします)。

imo、Nodeは従来のWebサーバーと連携して動作するの最適です。私が今整理している方法は、Apache経由で静的html / js / imagesを提供し、ノードアプリケーションへの長いポーリングによって「リアルタイム」データニーズを処理することです。


複数のホストを設定する際の使いやすさを+1することは、間違いなく検討に値します。
ポールd'Aoust

Apache httpdまたはnginxサーバーの背後にノードアプリを配置し、そのアプリのURI署名を使用してノードポート(またはポート)にリクエストをルーティングするのは非常に簡単です。
TomG

+1-サーバーサイドプロキシとしてのnode.jsの概念(「従来のWebサーバーと組み合わせて」)は、今年初めに注目を集め、検討する価値があります(特に、管理する大規模な従来のアーキテクチャがある場合)。これは、企業にとって意味のある設計パターンです。しかし、注目に値します-これはNode.jsを避ける理由ではなく、特定の目的で使用する理由です。
ジャックストーン14年

4
-1-ノードの前にプロキシ(nginxなど)を配置することは完璧なユースケースであり、実際には、プロキシをまったく持たない場合よりも、場合によってははるかに安全でパフォーマンスが向上します。ノードの利点を損なうことはありません。私は、Unixドメインソケットでノードアプリを実行し、nginxをゲートキーパーとして動作させる傾向があります。
スコットアンダーソン14年

3

ノードについて数秒考えることは技術的ではありません-それが何をするかで素晴らしいと驚くべきです。

彼らはビジネスであり、特に人的資本です。つまり、それを知っているプログラマー、彼らがどれだけの費用と彼らのアベイラビリティです。学ぶことはそれほど難しくありませんが、新しいテクノロジーと同様に、それをよく知っている(または知りたい)人々の数は、より大きな労働者のプールの最下位です。


そのため、従来のアプリスタックの代わりにNodeを使用することにそれほど多くはないと思います。問題は実世界の懸念と関係がありますか?
ポールd'Aoust

+1。人的資源-また、JavaScriptを学習したくない人もいます-は不便な真実です。この答えはそれをよく述べています。しかし、「人々がJavaScriptを嫌うから」というNodeの回避も論理的な進歩ではありません。他の誰かが嫌っていたすべての革新を避けたら、技術的にどこにいるのでしょうか?どこにもありません。ノードの課題は、A)新しい才能の獲得、またはB)伝統的な才能を新しい才能に教育することです。その点まで-Khan Academyの設立に関するJohn Resigの先見性から、JavaScriptコードの学校が至る所に現れています。要するに、これが物事のやり方です。+1。はっきり言って。
ジャックストーン14年

3

これは非常に良い質問であり、最新技術を進歩させるために私たちは尋ねなければなりません。

Node.JSの限界がどこにあるのか(Paul d'Aoustなど)を知りたいと思いました。悲しいことに、多くの答えは主観的な偏見と一時的に関連する根拠に満ちています。

私は自問しました:主観的なバイアスを除外し、この関連する質問に対する明確な回答を得ることができますか?

残りのポイントは次のようです:

1. NodeJSは、従来のフレームワークほど成熟していません。Paul d'Aoustが示唆しているように、これは一時的に関連する理由であり、完全に回避するためではなく、レビューとデューデリジェンスです。Webの専門家として宿題をすることが期待されており、組織、ニーズ、将来、チーム(そして私たちではない)に最適なテクノロジーを決定するのが私たちの仕事です。成熟度は、明確化の必要性とリスクへの欲求の判断ですが、回避ではありません。

2.プロキシサーバーとしてのNodeJS。事前の議論の賢明な提案は、検討と検討に値します。これは、フロントエンドインターフェイスプロキシデザインパターンとして、既存のテクノロジと相関してNodeを使用するという概念です。しかし、それはノードを使用することを避ける理由ではなく、代わりに完全な代替として使用することを避ける理由です。代わりに、結果的なアプローチを選択します。

3.デバッグノード。Joyentのコアノード開発者との会話では、デバッグ可能性と、コアに起因する問題の根本原因の追跡(シングルスレッドの実行と過去のスレッドを確認できないことに基づく)を取り巻く問題が多くあります。これは検討および評価する価値がありますが、(再び)一般的な使用法では、エンベロープをプッシュする可能性のあるエッジケースのみを嫌うことはないでしょう。特定のニーズがこのカテゴリに分類される場合もあれば、そうでない場合もあります。

4.人事。これが、このページでJSを使用することを避ける一番の理由です。私の謙虚な意見では、これは厳しく不便な真実です。それは疑問を投げかけますあなたの会社には、ライフサイクル全体を通してプロジェクトを見るために、適切な才能のある専門家がいますか?そうでない場合、NodeJSを避ける​​必要があることは間違いありません。または、代わりにA)正しい才能を見つけるか、B)既存の才能を教育することを検討してください。

苦情: JavaScriptに関する苦情の私の観察では、多くの場合、言語の一貫した失敗からよりも、ユーザーエラーからより多くの結果が生じます。私たちは「The Hate JavaScript Diatribe」に対する多くの主張を暴きました。そして、さらに多くのことを暴き続けます。次のような問題-ドキュメンテーションは十分ではない、それはセクシーではないが、人々はそれを好きではない、それは癌である、それは悪魔である、またはそれはあまりに「タイプミス」(-CRichardson)であり、主観的であり、正確な企業の意思決定のために排除する必要がある偏った苦情。

最終的に、正解は-AVOID NodeJSに正当な理由はありません。たぶん、これが急速な成長、採用、貢献を経験している理由です。しかし、おそらくここでの答えは、NodeJSの評価、調査、理解を続け、具体的な嫌悪感を探すことです。Node.JSが未熟な場所を正確に理解することにオープンであることを追求するために、それを改善する必要がある場所を正確に見つけます。そしてそれは祝福です。

良い質問。私は誰かがNodeJSを避ける​​ためのより良い理由を持ち出すことに興味があります-これらよりも。


-1

非リアルタイムアプリケーションでXよりもノードを使用する利点はありますか?

  • スケーリング:ノードのパフォーマンスは良好ですが、他のプラットフォームも同様です。PHP、Ruby、Python、およびJavaはすべて拡張可能です。何百万人ものユーザーが使用している大きな名前を見つけることができます。
  • フロントエンドとバックエンド用の1つの言語:これは冗談です。Javaの「どこでも一度実行すれば書き込み」のように
  • ホットでセクシー:唯一の有効なポイント。しかし、あなたのウェブサイトがエッジの効いた技術を使用していることに誰も気にしません!

非リアルタイムアプリケーションにX over Nodeを使用する利点:

  • ベストプラクティス:Nodeは新しいため、特にCRUD Webアプリケーションの場合、他のプラットフォームよりもベストプラクティスが少なくなっています。
  • Javascript言語:人々はJavascriptが好きではありません。Node.jsはホットですが、Javascriptはホットではありません。これが、クライアント側でもJavascriptを記述しないように人々がCoffeescriptを作成した理由です。
  • 開発速度:RailsやDjangoを含むがそれらに限定されない、古くて退屈なフレームワークは、CRUD Webサイトで長年にわたって十分にテストされ、改善されています。Nodeで同様のアプリケーションを実装できますが、おじいちゃんのフレームワークで行う方が簡単です。
  • 安定性:NodeのWebフレームワークはより速いペースで改善されています。それは、それらが変化しており、近い将来により多くのAPIの非互換性があることを意味します。
  • ライブラリとツール:より多くのユーザーを持つ古いテクノロジーには、より多くのライブラリとツールがあります。

私の答えは2015年には間違いなく無効になります。2014年には、非リアルタイムWebアプリケーションのNodeをスキップしますが、注意してください。

すべてのWebフレームワークには長所があります。その点で使用している間、あなたは幸せになるでしょう。非リアルタイムWebアプリケーションは、NodeのWebフレームワークの長所ではありません。


2
-1。この答えは2015年には有効ではないことに同意します。しかし、それはまた、ダウン投票の理由でもあります。上記の8つの箇条書き項目を無効にします-それらが一時的にのみ関連していることがわかる場合。1)スケーリング-ノードを回避する理由ではなく、Walmart Mobileのスケーリング。2)同型JSは冗談ではありません。理由ではありません。3)サーバーのセクシーさ?ほとんどのユーザーはuxのみを知っています。4)ベストプラクティスは主観的、5)ホットではない?-主観6)より簡単ですか?-主観的。7)安定性は一時的に関連するポイントです。8)NPMは2014年にMavenに合格すると予測されています。理由はありません。ダウン投票。
ジャックストーン14年

-1

Node.jsは非常に人気のあるプラットフォームであり、多くの興味深い機能がありますが、ツールの使用は個人的な好みです。Node.jsを4回提供しましたが、満足できませんでした。ここに私の理由があります。これらの理由のいくつかは時代遅れ、または単に個人的なものであることに留意してください:P

  • 私は別の言語/構文を好みました(Python、Scalaが好きで、私のお気に入りの言語はPrologですので)。
  • 私が使用したフレームワークとライブラリのドキュメントの品質は、Java、Scala、Pythonライブラリほど良くありません。
  • nodejsのデザイナーは、イベントモデル、オブザーバー、フューチャーの代わりにコールバックに非常に夢中です。
  • 2005年に開発されたRuby、Python、Javaでやりたいことにはすぐに解決策があります。設定ファイルを編集するだけです。

2
-1-主観的なポイント。「好みの構文」、「あまり良くないドキュメント」、「強迫観念のコールバック」、および「私の言語で既に行われている」は、すべて曖昧で主観的です。これらは以前に聞いたことがあります。彼らは暴かれています。ここでNode.JSを避ける​​理由はありません。ダウン投票。
ジャックストーン14年

1
すべてのポイントは、私が公然と述べた私の個人的な好みです。また、個人的な好みをどのように非難しますか?
デビッドセルゲイ14年

-9

HTTPはステートレスであるため、実際には非リアルタイムWebアプリのようなものは存在しないため、すべてにノードを使用できない理由はありません。

ただし、ノードは特定のタイプのアプリケーションアーキテクチャにより適しています。PHPは、少しのコードを含むHTMLファイルです。ノードは、オプションで少しのHTMLを含むコードです。

これは、アプリがクライアント側スクリプトのない標準のhtmlフォームである場合、PHPがより簡単になることを意味します。Nodeにはテンプレートツールがありますが、明らかにPHPのようなものほど成熟していません。

クライアント側のスクリプトがたくさんあり、データをajaxで保存すると、サーバー上の関数を呼び出す静的なHTMLクライアントになります。これはまさにノードが得意とするものです。CRUDアプリの通常のビルド方法ではありませんが、適切なフレームワークを使用すると、かなり素晴らしいものを作成できます。


HTTPがステートレスであり、リアルタイムに似ているという点。ただし、リアルタイムの典型的な定義である大量の軽量の要求に関する実際的な懸念に興味があります。JSONの3行または4行を吐き出すためだけに、新しいPHPインスタンスをスピンアップするのは少しやり過ぎのようです。私は正しいですか、それともオウム症候群に苦しんでいますか?
ポールd'Aoust

PHPをロードしていない場合はJavaScriptをロードしており、さまざまな種類のキャッシュが関係しているため、違いは心配するほどではありません。大きな違いはコーディングスタイルと保守性にあります。どちらのプラットフォームもHTMLまたはJSONを出力できますが、PHPは静的なhtmlファイルの編集に慣れている人向けに設計され、ノードは最新のJavaScriptプログラミングに慣れている人向けに設計されています。
トムクラークソン

インタープリターをしばらくロードする必要があることはわかっていますが、インタープリターをスピンさせるのではなく、Node.jsのように、インタープリターの1つのインスタンスを常に実行すること(もちろん、低CPUアプリの場合)にメリットがあると思いますPHPのように、すべてのリクエストで起動および終了します。
ポールd'Aoust

はい。また、最近、そのスペースでの競争の量を考えると、jsは個々のリクエストレベルでより良いパフォーマンスを期待しています。しかし、それは違いの比較的小さな部分であると思います-ノードを使用すると、リクエストを処理するのに必要なコードと正確な量を直接制御できますが、ページを処理していると想定するテンプレートベースのシステムは、不要なオーバーヘッドと複雑さを追加します他のシナリオ。
トムクラークソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.