最近、新しい会社に行き、長い間放置していたバックエンドを引き取りました。しかし、会社のニーズにより、バックエンドは を使用しています。 Nodejs、最近Node.jsを勉強しているのですが、少しずつ理解を深めていくと、Node.jsには理由があることが分かりました。ますます人気が高まる可能性があります。 Java はバックエンド言語として常にリーダーであり続けているのに、なぜ Node.js を学ぶ必要があるのかと言う人もいるかもしれません。 Node.jsそれは正確には何ですか?それは新しい言語ですか、新しいフレームワークですか、新しいツールですか、それとも単なる JavaScript ファイルですか?
関連する推奨事項: 「nodejs チュートリアル 」
ランタイム環境
誰もが知っている JavaJava プログラムをスムーズに実行できるように、JRE というランタイム環境を用意します。 JREJVM という仮想マシンがあります。 JVM には、ガベージ コレクター (GC)、ジャストインタイム (JIT) コンパイラー、インタープリター、クラス ローダー、スレッド マネージャー、例外プロセッサなどの多くのコンポーネントがあります。 、異なる時間に異なるタスクを実行するために使用されます。 JREJava プログラムの実行を支援する一連のライブラリもあります。
なぜ突然 JRE ランタイム環境を使用するのでしょうか? 実際、これは Node と比較するためです。Node は言語、フレームワーク、ツールではありません。JavaScript アプリケーションを実行する方法です。 。 実行時環境。 Node.js には JavaScript Virtual Machine と呼ばれる仮想マシンがあります。 JavaScript ベースのアプリケーション用のマシン コードを生成し、さまざまなプラットフォームでそれを有効にします。この仮想マシンは Google の V8 エンジンであり、タスクの実行、ランタイム コンパイル、メモリ管理にそれぞれ使用される JIT や GC などの主要コンポーネントも備えています。
開発可能性
Java と の開発可能性を判断する必要がある場合があります。 Node しかし、エコロジカル コミュニティとその背後にあるサポート ライブラリを見ると、Java をコアとする従来のシステムは、当然ながら Node のような新しい勢力ほど優れていません。 、 Java は成熟していて巨大で、Node は高速でアクティブです。
Java 機能や実用性については言うまでもありませんが、Java には大量のサンプルコードが含まれており、プログラマの意図を妨げます。 Java の 3 つの主要なフレームワークの 1 つである spring と同様に、プログラマーが spring、servlet、データ永続性、およびコンポーネントを使用する場合システムを構成する基礎となるもの、spring フレームワークはカプセル化されており、すべてを処理するのに役立ちます。ビジネス層のコードを書くことだけに集中する必要があります。
しかし、Spring では、サブシステムが相互にフォローし合うため、たとえ些細な間違いを犯したとしても、クラッシュする例外が発生して罰せられます。その直後に大きな例外メッセージが表示される場合があります。 Spring は、コードの機能を実現するために多くの作業を行ってきました。
このレベルの抽象化には明らかに多くのロジックが必要であり、長い例外メッセージは必ずしも悪いことではありません。これは、メモリとパフォーマンスにどの程度の追加のオーバーヘッドが必要かという症状を示しています。 spring はどのように実行されますか?フレームワークは、メソッド名を解析し、プログラマの意図を推測し、抽象構文ツリーのようなものを構築し、SQL を生成するなどの作業を行う必要があります。
これらの追加費用はいくらですか?したがって、複雑さを隠すために Java を使用しても、システムは単純化されず、システムがより複雑になるだけです。 Java 厳密な型チェックにより、不正なコードはコンパイルできないため、Java はさまざまなタイプの bug を回避できます。
Java の強力な型指定の欠点は、定型コードが多すぎることです。プログラマーは常に型変換を実行する必要があり、エラーを早期に発見して修正するために、より多くの時間を正確なコードの作成に費やし、より多くの定型コードを使用する必要があります。
そして、Node.js はその逆です。スレッドはより複雑なシステムにつながります。そのため、Node.js は軽量のシングルスレッド システムを採用し、非同期コールバックに js の匿名関数を使用します。クロージャである匿名関数を使用するだけで済みます。正しい抽象インターフェイスを探す必要はなく、冗長性のないビジネス コードを書き留めるだけです。これは Node.js を使用する最大の利点ですが、非同期コールバックには当然、解決する必要がある緊急の問題、コールバック トラップ が存在します。
Node.js では、コールバック関数をネストし続けると、コールバック関数の罠に陥りやすくなります。ネストの各層によりコードがより複雑になり、エラー処理と結果が作成されます。加工がさらに難しくなります。これに関連する問題は、JavaScript 言語ではプログラマが非同期実行を適切に表現できないことです。実際、一部のライブラリでは Promise を使用して非同期操作を簡素化していますが、問題を単純化しているように見えますが、実際にはコード レベルはより複雑です。コード: プログラマーの真の意図を隠すこと。 LaterNode.js
はES5 と ES6 をサポートしており、コールバック関数は async/await## を使用して書き換えることができます。 # 関数。同じ非同期構造ですが、通常のループ構造を使用して記述されています。エラーと結果の処理も自然な場所に配置され、コードが理解しやすく、書きやすくなり、プログラマの意図が理解しやすくなります。コールバック トラップは、複雑さをマスクすることで解決されません。 代わりに、言語とパラダイムの変更により、コールバック トラップの問題が解決されると同時に、定型コードが多すぎるという問題も解決されます。 async 関数を使用すると、コードがさらに美しくなります。
Node.jsの欠点を利点に変えるシンプルなソリューション。しかし、JavaScript は非常に大まかに型付けされています。また、コードを作成するときにエラーは報告されず、多くの型を定義する必要がなく、通常は型変換を使用する必要もありません。 したがって、コードはより明確で読みやすくなりますが、コーディング エラーが見落とされるリスクがあります。文法とロジックに問題がないかどうかはコンパイル中にのみチェックされるため、Node.js
BUGのデバッグを改善するために、Node はプログラムを異なるモジュールに分割することをサポートしています。モジュールの存在により、エラーの発生範囲が一定の範囲に限定され、# になります##Node.jsモジュールはテストが簡単です。 パッケージ管理
最も重要な問題の 1 つは、統合されたパッケージ管理システムがないことです。 Maven について説明しますが、目的、使いやすさ、機能の点で、Maven は
Node.jsのパッケージ管理システムとはまったく異なります。 npm は、Node.js によって正式に提供されるパッケージ管理ツールであり、
Node.jsパッケージの標準リリース プラットフォームとなっています。 Node.js パッケージの公開、伝播、依存関係の制御に使用します。 npm パッケージのダウンロード、インストール、アップグレード、削除を簡単に実行できるコマンド ライン ツールを提供します。また、開発者としてパッケージを公開および保守することもできます。 最も優れた点は、npm コード ベースが Node.js だけでなく、フロントエンド エンジニアによっても使用されていることです。すべてのフロントエンド
JavaScriptライブラリは、npm パッケージの形式で存在します。 Webpack などの多くのフロントエンド ツールは Node.js で記述されています。 パフォーマンス
Java使用 HotSpotマルチワードを使用するこのスーパー仮想マシンセクション編集戦略。頻繁に実行されるコードを検出し、コードの実行回数が増えるほど、より多くの最適化が適用されます。したがって、
HotSpotのパフォーマンスは比較的高速になります。 Node最下層は、Node.js# のイベント駆動メカニズムである c
およびv8 エンジンを使用して実装されます。 ##、これは、大規模な http リクエストに直面しても、Node.js はイベント駆動によって実行されるため、パフォーマンスの部分を心配する必要がないことを意味します。そしてそれは素晴らしいです。また、V8 エンジンの改良により、Node.js の各リリースでパフォーマンスが大幅に向上します。 Node は、同時実行性の高いアプリケーションに対して非常に高いパフォーマンスを備えていますが、Node.js には独自の欠点もあります。Node
は適していませんCPU
集中的なアプリケーション。CPU のタイム スライスが低下します。解放されないため、後続の IO すべての操作が一時停止されます。 そして、Node はシングルコア CPU
のみをサポートし、#信頼性が低いです。コードの特定のリンクがクラッシュすると、システム全体がクラッシュします。理由は、Node が単一のエントリを使用しているためです# # #######手順。
のオープン ソース コンポーネント ライブラリは品質にばらつきがあり、更新が速く、下位互換性がありません。
プログラミング関連の知識について詳しくは、以上がNode.js と Java バックエンド サーバーの簡単な比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。