コードをマシンコードに変換するには、インタプリタとコンパイラという 2 つの主なアプローチがあります。 JavaScript はインタプリタ型言語と呼ばれることがよくありますが、それは完全に正確ではありません。その理由については後で説明します。
インタプリタとコンパイラ
インタプリタはコードを 1 行ずつ変換するため、コードを迅速に実行するのに最適です。これは実行を迅速に開始する方法ですが、反復的なタスクが最適化されないという欠点もあります。たとえば、コードに同じ結果を繰り返すループがある場合、インタープリターは最適化を行わずに毎回処理するため、処理速度が低下します。
一方、コンパイラーはコード全体を一度に取得し、マシンコードに変換します。このプロセスは最初は時間がかかりますが、最初のコンパイルの後ははるかに速く実行されます。これは、コンパイラーがループなどの反復的なタスクを最適化し、コードをより効率的にできるためです。
JIT (ジャストインタイム) コンパイラーを入力してください
2000 年代後半、エンジニアはインタプリタとコンパイラの両方の長所を認識し、より優れたもの、つまり JIT (Just-In-Time) コンパイラを作成することにしました。このハイブリッド アプローチは、両方の長所を組み合わせたものです。
その仕組みは次のとおりです:
JavaScript ファイルをブラウザに渡すと、コードはパーサーを通過し、抽象構文ツリー (AST) に変換されます。
この時点で、次のことを決定する必要があります。
コードを最適化する必要がない場合、コードはインタプリタに直接送られ、コードが機械可読命令 (バイナリ) に変換されます。
コードに反復的なタスクや複雑なタスクがある場合、プロファイラーは最適化の必要性を検出してコンパイラーに転送し、コンパイラーはコードを最適化して変換します。
よりよく理解するための最適な図はこちらです
それでは、「JavaScript はインタプリタ型言語ですか?」と誰かが尋ねると、 「技術的にはそうだ」と言えますが、それは実装によって異なります。 JavaScript は、JIT コンパイルのおかげで、インタープリターとコンパイラーの両方を使用します。
これは、インタープリターとコンパイラーの効率の違いを示す例です。
function calculateSum() { let sum = 0; for (let i = 0; i < 1000000; i++) { sum += i; } return sum; } console.log(calculateSum());
この例では、インタープリターはループの各反復を 1 つずつ実行します。一方、JIT コンパイラーは、ループを最適化して最初の実行後の実行速度を向上できることに気づきます。
結論
JavaScript が内部でどのように動作するかを理解すると、その柔軟性と効率性を理解することができます。インタプリタとコンパイラの組み合わせ (JIT のおかげ) により、最新のブラウザで JavaScript を迅速かつ効率的に実行できます。
次回、誰かが JavaScript をインタープリタ型言語と呼ぶ場合、最初はそのように動作するが、最適化が必要な場合にはコンパイル済み言語のように動作することもできると説明できます。
以上がJavaScript が単なるインタープリター言語ではない理由: JIT コンパイルを理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。