ホームページ > 記事 > ウェブフロントエンド > Node.jsとは何ですか?利点は何ですか?
関連する推奨事項: 「nodejs チュートリアル 」
JS には JAVA ほど大きなエコシステムはありませんが、JS の忠実なファンとして、しかし、JavaScript はクライアント側のスクリプトからサーバー側のスクリプトに移行したため、私たちはそれに注目するようになりました。JavaScript は徐々に台頭しており、別の観点から学ぶ必要があります。
Node.js とは何ですか?
#Nodejs は本質的に JavaScript 実行環境です。
Google ベースの V8 エンジンは、実際には Chrome の V8 エンジンを切り出してカプセル化した実行環境です。 公式 Web サイトにアクセスしてパッケージをダウンロードし、確実な方法でインストールしましょう。 ノード ダウンロードの公式 Web サイト: https://nodejs.org/en/download/ コマンド ラインに「node」と入力して、JavaScript スクリプトを実行します。Node.js の利点?スクリプト言語 JavaScript がサーバー言語として使用できるのはなぜですか?
利点 1 Node.js は非常に高い同時実行機能を備えています
Node.js の最初の目標は、高性能サーバーを作成し、サーバー上でさまざまなアプリケーションを実行するためのシンプルな開発ツール。 Java、PHP、.net などの古典的なサーバーサイド言語と比較すると、Node.js は若くて元気な少年のようなもので、Java 言語はクライアントごとに新しいスレッドを作成し、クライアント接続ごとにスレッドが作成され、2MB のメモリが消費されます。つまり。理論的には、8GB サーバーには約 4,000 人のユーザーが同時に接続できますが、より多くのユーザーを高い同時接続でサポートするには、追加のサーバーを追加する必要があります。Node.js は、クライアント接続ごとに新しいスレッドを作成せず、1 つのスレッドのみを使用します。
これは、Node が単一のスレッドに基づいているためです (リクエストを受信して応答するメイン スレッドは 1 つだけです) これは遅くないですか?実際にはそうではありません。 Node.js がユーザー接続を受信すると、内部イベントがトリガーされます。事前定義された関数を通じてユーザーの行動に応答します。 Node.js のメイン スレッドはプログラムのプロセスを気にしません。実際には、Node のメイン スレッドがファイルにアクセスしてデータベースを読み取るのを支援する別の作業スレッドがあります。作業スレッドがファイル データまたはデータベース内のデータ。コールバック関数は、見つかったデータをクライアントに送信したり、一部の操作の接続を閉じたりするなど、実行のためにノードのメイン スレッドに返されます。 (これはノードのノンブロッキング I/O、イベント駆動型です)。#添付されている以下は、私が描いた写真です(不適切なものがあれば許してください)
#にプロトタイプがあるはずですつまり、Node.js のメイン スレッドはリクエストの受信とリクエストへの応答でビジー状態であるため、複数のクライアントからのリクエストを継続的に受信でき、無駄に待つ必要がありません。ワーカー スレッドがデータを見つけると、イベント コールバック関数がトリガーされ、データが取得されたことをメイン スレッドに通知します。このとき、メイン スレッドはコールバック関数を実行してデータをクライアントに返します。
理論的には、8G メモリを搭載したサーバーは、同時に 30,000 ~ 40,000 人のユーザーの接続に対応できます。
ここで Node が威力を発揮します (シングルスレッド、ノンブロッキング IO、イベントドリブン)
利点 2 ノードは JavaScript 構文を使用します #Node.JS
V8 エンジンは JavaScript に基づいています。つまり、JS の構文を知っていればバックエンド開発に使用できますが、Node は ECMA を公式に推奨しています。 Script6 (ES6) 構文。Node は、JavaScript がブラウザー内でのみ実行できるという過去の状況を打破し、フロントエンドとバックエンドのプログラミング環境を統合し、開発コストを大幅に削減します。 (これはフロントエンド開発者にとって非常に親切です。JS でできることが増えれば増えるほど、フロントエンド開発が速くなります。)
メリット 3 Node.JS の登場により、フロントエンド開発が促進されます。エンドエンジニアリング感想近年フロントエンドは急速に発展しており、Node.jsはかけがえのない役割を果たしています。
Node.js は実行環境であるだけでなく、まったく新しい JavaScript 言語でもあります。JS 構文の基本に対応し、いくつかの内部モジュールも追加します
例:
httpリクエストレスポンスを処理するモジュール
use using use ’ s ’ s ’ through using ’ s through through ’s ’ through through through ‐ ‐ to ‐ ‐ ‐ n , ‐ and ‐ to 1 to 1 、コマンド ラインを使用して、プロジェクトに依存するバッグをダウンロードできるようにしましょう。
::
## NPM Install jQuery## NPM Install -G Webpack
# NPM Install-G Create-React-APP など モジュール構文の定義 ↓↓
const http = require('http')
const Jquery = require('jquery');。フロントエンドエンジニアリングをモジュール化して迅速に開発し、コードの結合を減らし、保守性を大幅に向上させます。
Node.js は何に適していますか? # これは、いくつかの node.js アプリケーション シナリオの下にリストされています。
# 非常に多くのノードがありますが。 js には上記の利点がありますが、欠点のない言語はなく、Node も例外ではありません。それは言語がどのようなシナリオや分野に適しているかだけの問題です。
Node はシナリオには適さない
①CPU 計算を多用するプログラム
Node.js バージョン 0.8 より前の Node.js はマルチスレッドをサポートしていませんでした。もちろん、これは設計哲学の問題です。Node.js の開発者とサポート者は、シングルスレッドおよびイベント駆動型の非同期プログラミングが従来のマルチスレッド プログラミングよりも効率的に実行されると固く信じているからです。しかし実際には、マルチスレッドでも同じスループットを実現できますが、コストはかかるかもしれませんが、マルチコア環境用に特別な構成を行う必要はありません。対照的に、Node.js はシングルスレッドの性質のため、マルチコア リソースを最大限に活用するにはマルチプロセス アプローチを使用する必要があります。 理想的には、Node.js シングルスレッドは実行中に CPU コアを完全に占有し、すべてのリクエストは現在のリクエストが処理されるまで待機し、応答する前にイベント ループに入る必要があります。アプリケーションがコンピューティング集約型である場合、手動でアプリケーションを分割しない限り、要求応答の待ち時間はかなり長くなります。たとえば、イベントのコールバック関数で複雑な計算を実行する必要があり、200 ミリ秒の CPU を消費する場合、イベント ループ内のすべてのリクエストは 200 ミリ秒待機する必要があります。応答速度を向上させる唯一の方法は、この計算集約的な部分を複数のロジックに分割することですが、これによりプログラミングがさらに複雑になります。それでも、システムの合計スループットと合計応答遅延は減少しませんが、スケジューリングは若干公平になります。幸いなことに、実際の Web サーバーには、計算負荷の高い部分はほとんどありません。そのような部分がある場合でも、すぐに応答するために実装する必要はありません。正しい方法は、サーバーが処理中であることをユーザーに通知し、処理が完了したらユーザーに通知し、サーバー上の他のプロセスまたは他の専用サーバーに作業を任せることです。
②シングルユーザー マルチタスク アプリケーション 先ほど説明したのは通常サーバーサイド プログラミングであり、前提条件の 1 つは多数のユーザーが存在するということです。ただし、ローカル コマンド ライン ツールやグラフィカル インターフェイスなど、単一のユーザーに直面している場合、いわゆる大量の同時リクエストは存在しません。単一のユーザーとはいえ、必ずしも単一のタスクであるとは限りません。たとえば、ユーザーにインターフェイスを提供しているときに、バックグラウンドで特定の計算が実行されている場合、ユーザー インターフェイスがブロックされないようにするには、マルチスレッドまたはマルチプロセスを有効にする必要があります。 Node.jsのスレッドやプロセス間の通信は今のところロックが全くないので不便なのでデッドロックにはならないと言われています。 Node.js の複数のプロセスは同じタスクを実行し、複数のプロセスを通じて複数のプロセッサのリソースを利用することがよくありますが、複数のプロセスが連携すると負荷がかかります。
Node.js の制御フローは直線的ではありません。イベントによって分割されますが、人間の思考は直線的です。言語に合わせて思考を変換しようとすると、またはコンパイラを犠牲にする必要があります。たとえば、次のようなロジックを実装する必要があります: 銀行からお金を引き出し、そのお金を使って特定の仮想製品を購入し、購入後に在庫データベースに追加します。その間のステップには数十の I/O 操作が含まれる場合があります。 . 、操作が失敗した後はロールバック操作を実行する必要があります。このプロセスは線形であり、すでに非常に複雑ですが、非線形ロジックに分割すると、おそらくその複雑さは維持できなくなるでしょう。 Node.js は、単純なロジックで頻繁にアクセスされるタスクの処理には優れていますが、非常に複雑なロジックでタスクを完了するのには適していません。
「はい、これが Node.js のまとめです。これ以上は言いません。長い間書いてきたので、コーディングしていきます。」
プログラミング関連の知識について詳しくは、プログラミング教育をご覧ください。 !
以上がNode.jsとは何ですか?利点は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。