Node.js が登場する前は、JavaScript はブラウザーでしか実行できず、Web スクリプトとして使用して、Web ページに特殊効果を追加したり、サーバーと通信したりできました。 Node.js を使用すると、JavaScript をブラウザーから切り離して、他のプログラミング言語のようにコンピューター上で直接使用できるため、ブラウザーに制限されることなく、やりたいことを何でも実行できます。
Node.js は新しいプログラミング言語でも、JavaScript フレームワークでもなく、JavaScript コードの実行をサポートする JavaScript ランタイム環境です。プログラミング用語では、Node.js は JavaScript ランタイム (ランタイム) です。
現在の JavaScript は、Web フロントエンド プログラミング (Web プログラミング) に使用されるだけでなく、次のような多くのことも実行できます。
- PHP、Java、Python、Rubyなどのプログラミング言語を得意とするWebサイトのバックグラウンドを開発し、
- QQ、360、Thunder などのインターフェイスを備えたコンピューター ソフトウェアと呼ばれることが多い GUI プログラムを開発します。
- Android APP、iOS APPを含むモバイルAPP;
- CLI ツール、つまりインターフェイスのないコマンドライン プログラム。
JavaScript を学んだ後は、フルスタック エンジニアであるだけでなく、Node.js によってもたらされる全能者でもあることがわかります。
Node.js公式サイト日本語版: https://nodejs.org
ランタイムとは
いわゆるランタイムとは、プログラムが動作中に依存する必要がある一連のコンポーネントまたはツールを指します。これらのツールとコンポーネントはパッケージ化されてプログラマーに提供され、プログラマーは記述したコードを実行できます。
JavaScript の場合、実行時に次のコンポーネントに依存します。
1) 通訳
JavaScript は、解釈と実行を同時に行う必要があるスクリプト言語であり、どのソース コードを使用してどのソース コードをコンパイルするか、およびプロセス全体がインタープリターによって完了します。インタープリターがなければ、JavaScript はコンピューターが読み取ることのできないプレーン テキスト ファイルの集まりにすぎません。
2) 標準ライブラリ
JavaScript コードでいくつかの組み込み関数を呼び出します。これらの関数は自分で作成したものではなく、標準ライブラリに付属しています。
3) ローカルモジュール
いわゆるローカルモジュールとは、あらかじめコンパイルされたモジュールで、バイナリファイルであり、実行ファイルと内部構造に違いはありませんが、単独では実行できません。これらのローカル モジュールは、実際にはダイナミック リンク ライブラリ (Windows では .dll ファイル) であり、C や C++ などのコンパイル済み言語を使用したことがある場合は、それらをよりよく理解できるはずです。
JavaScript の多くの機能には、次のようなネイティブ モジュールのサポートが必要です。
- Cookie は、少量のユーザー データを保存するために使用されます. これは、ユーザーのコンピューター上の小さなファイルです. Cookie の使用には、ファイル操作モジュールのサポートが必要です.
- Ajax は、インターネットを使用してサーバーからデータを要求できます。これはネットワーク操作であり、ネットワーク ライブラリによってサポートされている必要があります。
- コードの実行プロセスを段階的に追跡して、ロジック エラーを見つけます。このプロセスはデバッグと呼ばれ、デバッガー (デバッガー) のサポートが必要です。
- JavaScript は HTML を操作できます。これには、HTML 解析モジュールが事前に DOM ツリーを構築する必要があります。
ローカル モジュールは、一般的に共通の機能をカプセル化し、高いパフォーマンスが要求されるため、通常は C 言語、C++、アセンブリ言語などのコンパイル済み言語を使用して実装されます。
JavaScript インタープリターはローカル モジュールのサポートを必要とし、標準ライブラリは、それが記述されるときにローカル モジュールのインターフェイスも呼び出します。また、私たちが記述する JavaScript コードは通常、ローカル モジュールを直接使用しません。そのため、フロントエンド Web プログラマーはそれらに触れることはできません。
ローカル モジュールは舞台裏のヒーローであり、明らかではありませんが、不可欠です。
要約する
インタプリタ、標準ライブラリ、ローカルモジュールなどのさまざまなコンポーネント/ツールが連携して JavaScript コードの実行をサポートし、これらをまとめて JavaScript ランタイムと呼びます。
Node.js の前は、JavaScript ランタイムはブラウザーのさまざまなモジュールとしてブラウザーにバンドルされていました。つまり、JavaScript コードを実行する場合は、ブラウザーを起動する必要があります.JavaScript はブラウザーの手のひらから逃れることができず、その機能は大幅に制限されており、Web スクリプトとしてのみ使用できます。
Node.jsの誕生
JavaScript の寿命には、ブラウザ戦争が伴いました。 JavaScriptはNetscape(ネットスケープ)というブラウザで公開されていましたが、ネットスケープはIEとの競争に敗れ、とうの昔に存在しなくなり、その後、GoogleのChromeブラウザが突如登場し、その強力な性能でIEを叩きのめしました。
Google は、「V8」と呼ばれる JavaScript エンジン (JavaScript インタープリターとも呼ばれます) を Chrome ブラウザーに統合しました。このエンジンは、JavaScript コードを非常に迅速に解析および実行できます。
C++ 言語で記述された V8 エンジンは、独立して実行することも、他の C++ プログラムに組み込むこともできます。 Google は V8 エンジンと Chrome ブラウザ全体をオープン ソース化しており、誰でも問題なく V8 をプロジェクトに適用できます。
V8 エンジンのパワーと当時の JavaScript の人気により、Ryan Dahl というプログラマーは「間違った考え」を抱くようになりました.彼は、JavaScript をコンピューター上で直接実行できるように、ブラウザーの外部で JavaScript のランタイムを構築することを望んでいました。実行すると、JavaScript が Python、Ruby、PHP などの他のスクリプト言語と同じくらい大きくなり、ブラウザーによって小さなことを制限されることがなくなります。
Ryan Dahl と彼のチームは実際にそれを行い、このスタンドアローン JavaScript ランタイムを Node.js と名付けました。JavaScript フレームワークと間違われないように、最近では Node と短縮されることもよくあります。
V8エンジン公式サイト: https://v8.dev/
Node.js のコンポーネント
Node.js ランタイムは、主に V8 エンジン、標準ライブラリ、およびローカル モジュールで構成されます。特に、ローカル モジュールの数は、最下層の Node.js 機能の強度を決定します。
1) V8エンジン
V8 エンジンは JavaScript インタープリターであり、JavaScript コードの解析と実行を担当します。
V8 エンジンは、Java 仮想マシンと C++ コンパイラの多くのテクノロジを利用しており、JavaScript コードをネイティブ マシン コードに直接コンパイルし、キャッシング メカニズムを使用してパフォーマンスを向上させ、JavaScript をバイナリ プログラムに匹敵する速度で実行します。
2) ローカルモジュール
Node.js は、次のような C/C++ 言語で実装された多くの高性能オープン ソース ライブラリを統合します。
モジュール | 例証する |
---|---|
libuv | クロスプラットフォームのイベント駆動型非同期 I/O ライブラリ。しかし、libuv は I/O に限定されず、プロセス管理、スレッド プール、シグナル処理、タイマーなどの機能も提供します。
Linux ではすべてがファイルであり、ここでの I/O にはファイルの読み取りと書き込みだけでなく、データベースの読み取りと書き込み、ネットワーク通信 (ソケット) などが含まれます。 |
nmp | パッケージのダウンロード、パッケージのインストール、パッケージのアンインストール、パッケージの更新、パッケージのアップロードなどを実行できる Node.js パッケージ マネージャー。 |
http_parser | Web アプリケーション開発をサポートするために C 言語で記述された軽量の HTTP パーサー。 |
zlib | 産業グレードのデータ圧縮/解凍モジュールである Nodejs は、zlib を使用して、同期、非同期、またはストリーミングの圧縮/解凍インターフェイスを作成します。 |
OpenSSL | このモジュールは、SSL プロトコルや https プロトコルなど、最新の Web がセキュリティのために依存している、十分にテストされた暗号化/復号化機能を多数提供します。 |
c-ares | 非同期 DNS クエリおよび解決ライブラリ。 |
Node.js は JavaScript コードをコンピューター上で直接実行し、JavaScript に強力な機能を付与する必要があるため、そのローカル モジュールはブラウザーのランタイムとはまったく異なり、ほとんど接続されていません。 Node.js はブラウザーをほぼ完全に放棄し、新しい JavaScript ランタイムをゼロから構築しました。
3) 標準ライブラリ
ローカル モジュールは C/C++ で記述されており、Node.js は JavaScript 開発者向けであるため、ローカル モジュールの C/C++ インターフェイスをカプセル化し、一連の洗練された JavaScript インターフェイスを開発者に提供し、インターフェイスを維持する必要があります。異なるプラットフォーム (オペレーティング システム) での一貫性。
この JavaScript インターフェイスのセットは、Node.js 標準ライブラリです。標準ライブラリがエレガントで強力かどうかは、Node.js の使いやすさを決定し、Node.js の市場パフォーマンスに直接影響します。
要約する
V8 エンジンと多くのローカル モジュールは既製であり、他のモジュールは既にホイールを構築しています. Node.js の主な仕事は、適切なモジュールを選択し、それらを統合し、優れた JavaScript インターフェースを作成することです.
もちろん、すべてのローカル モジュールが適しているとは限りません. Node.js もいくつかのモジュールを独自に作成しており、代表的なものは Libuv です。 Libuv は Node.js のコアで最も基本的なモジュールであり、Node.js は完全に Libuv に基づいて構築されています。
Node.js はイベントベースのシングルスレッド非同期 I/O アーキテクチャを採用していると聞いたことがあるかもしれません.これが Node.js の最大の特徴であり,他のスクリプト言語との最大の違いです.この Node.js の機能はLibuv 実装に依存します。
Libuv は非常に強力であるため、関係者はそれを Node.js から切り離し、別のネットワーク ライブラリとしてリリースし、資料なしでオープン ソースにすることにしました。現在、Libuv は非常に普及しており、従来の Libevent および libev ライブラリと合わせて「C/C++ の 3 大ネットワーク ライブラリ」と呼ばれています。
Node.js が有名な理由は主に、V8 エンジンと Libuv ライブラリを使用しているためです。V8 エンジンは Node.js の効率的な動作を保証し、Libuv ライブラリはイベント ループに基づく非同期 I/O 機能を提供します。
Libuv 公式ウェブサイト: http://libuv.org/
Node.js は JavaScript ランタイムであり、ブラウザー環境なしでコンピューター上で直接 JavaScript を実行できるため、JavaScript の使用が大幅に拡大されます。 JavaScript を Python、Java、Ruby などの他のプログラミング言語と同じように扱い、「ガジェット」と考えるのをやめるべきです。
最後に、JavaScript と Node.js の歴史をまとめましょう。
- Netscape ブラウザーは JavaScript スクリプトを派生させ、Web ページにプログラミング機能を与えました。
- Chrome ブラウザーは、JavaScript のパフォーマンスを向上させるために V8 エンジンを派生させました。
- V8 エンジンは Node.js を構築し、JavaScript のプログラミング機能を拡張します。
- Node.js は Libuv ライブラリを生み出し、Web 開発用の優れたツールを追加しました。