フロントエンドJavaScriptの動作原理

フロントエンドJavaScriptの動作原理

1. JavaScript エンジンとは何ですか?

JavaScriptエンジンは、JavaScript の実行時にソース コードをマシン コードにコンパイルすることを主な機能とするコンピュータ プログラムです。

各主要 Web ブラウザには独自のJavaScriptエンジンがあり、通常はwebブラウザ ベンダーによって開発されます。

  • Google Chrome V8。
  • Mozilla Firefox Spider Monkey。
  • Safari Javascript Core Webkit。
  • Edge (Internet Explorer)

以前のJavaScriptエンジンは主に Web ブラウザで使用されていましたが、 nodejsの登場によりこの制限は解消されました。

2. V8エンジン

V8 には、 parser 、インタープリター ( Ignition )、最適化コンパイラー ( TurboFan ) が含まれています。

パーサー:抽象構文ツリーを生成するために使用されます。

インタープリター (Ignition):ソース コードをバイトコードに変換します。

最適化コンパイラ ( TurboFan ):インライン キャッシュなどのいくつかの最適化コンパイルを実行します。

以下は、V8 エンジンの一般的なワークフローです。

  • まず、パーサーは抽象構文木を生成します。
  • 次に、インタープリターは構文ツリーに基づいて V8 形式のバイトコードを生成します。
  • 次に、最適化コンパイラがバイトコードをマシンコードにコンパイルします。

3. ランタイム環境

ブラウザ実行環境では、ブラウザは HTTP リクエスト、タイマー、イベントなどWeb APIを提供します。

サーバー実行環境では、nodejs が API を提供します。

以下は、ブラウザで実行されているときのJavaScriptのアーキテクチャです。メモリ ヒープ、メモリ スタック、イベント ループ、コールバック キューが含まれます。

スタック
ヒープ
コールスタック
コールバックキュー
イベントループ

4. ランタイムコールスタック

次のコードは、 JavaScript実行のコール スタックの変更を示しています。

関数 add(x, y) {
    x + y を返します。
}

関数 print(x, y) {
    console.log('x+y=',add(x, y))
}

印刷(1, 3)

5. 非同期タスク

JavaScript最初にprint関数を実行し、次にWeb API setTimeout()を呼び出します。Web Web API setTimeout()のコールバック関数を保存し、3 秒後にコールバック関数をコールバック キューに追加します。イベント ループはコール スタックが空であることを検出すると、キュー内のコールバック関数をコール スタックに移動して実行します。

関数 add(x, y) {
    x + y を返します。
}

関数 print(x, y) {
    setTimeout(関数(){
        console.log('x+y=',add(x, y))
    }, 3000)
}

印刷(1, 3)

6. まとめ

JavaScript主にJavaScriptエンジンとランタイム環境で実行されます。エンジンは js ソース コードをコンピューターが理解できるマシン コードに変換し、ランタイム環境は基盤となるコンピューターと通信するための API とランタイム実装を提供します。

フロントエンド JavaScript の動作原理に関するこの記事はこれで終わりです。JavaScript の動作原理に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript操作メカニズムの実行順序を理解する
  • JavaScriptの動作メカニズムの分析例
  • JavaScriptの動作原理の解析
  • JavaScriptでコード分析を効率的に実行する
  • JavaScript js 実行の 3 つのステップをご存知ですか?

<<:  MySQLでレコードを変更する場合、更新操作フィールド = フィールド + 文字列

>>:  Dockerでリモートアクセスを有効にする方法

推薦する

Vue でコミュニケーションを実装する 8 つの方法

目次1. コンポーネント通信1. Props 親コンポーネント ---> 子コンポーネント通信...

MySQL最新バージョン8.0.17解凍版インストールチュートリアル

個人的にはインストール版よりも解凍版の方がインストールしやすいと思います。早速、解凍版のインストール...

Nginx プロセス管理とリロードの原則の詳細な説明

プロセス構造図Nginx はマルチプロセス構造です。マルチプロセス構造は、次のような Nginx の...

Dockerはプライベートライブラリイメージを完全に削除します

まず、インターネット上の一般的な慣行を見てみましょうデフォルトでは、プライベート ライブラリはイメー...

JavaScript はマウスのドラッグを実装して div のサイズを調整します

この記事では、マウスをドラッグしてdivのサイズを調整するJavaScriptの具体的なコードを参考...

jsはaudioContextを通じて3Dサウンド効果を実現します

この記事では、audioContextを介して3Dサウンド効果を実現するためのjsの具体的なコードを...

任意の長さの配列を作成または埋めるための JS のヒントの要約

目次序文直接充填方式for ループの push() メソッド配列コンストラクタメソッド配列コンストラ...

MySQLデータベースのトランザクション分離レベルの詳細な説明

データベーストランザクション分離レベルデータベース トランザクションには、低から高まで 4 つの分離...

MySQL で B+ ツリー インデックスを使用する利点は何ですか?

この問題を理解する前に、まず MySQL テーブルのストレージ構造を確認し、次にバイナリ ツリー、マ...

友達やグループを見つけるためのJavaScriptのLayim

現在、layuiの関係者はlayim友達検索ページの構造とスタイルを提供していません。私は個人的に非...

Reactのコンポーネント共同利用実装

目次ネスティング親子コンポーネント通信ブラザーコンポーネント通信撤回するReact の Linked...

Nginxにモジュールを動的に追加する方法

前面に書かれた多くの場合、現在のプロジェクトの状況とビジネスニーズに基づいて Nginx をインスト...

Vue のライフサイクルとフック関数の詳細な説明と典型的な面接の質問

目次1. Vue ライフサイクル2. フック機能2.1 4つの段階と8つの方法に分かれています。 2...

Nginx 構成の実装 https

目次1: https証明書を準備する2: nginx sslモジュールを準備する3: SSL証明書を...