フロントエンド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でリモートアクセスを有効にする方法

推薦する

MySQL コマンドラインモードアクセス操作 MySQL データベース操作

使用環境cmd モードで、mysql --version と入力します (インストールされている M...

Nginx ログのカスタマイズとログ バッファの有効化の詳細な説明

序文ウェブサイトのアクセス元をカウントしたい場合は、PHP を使用して情報を取得してデータベースに記...

Linux TTY/PTS の違いの概要

キーボードで文字を入力すると、対応するプロセスにどのように送信されるのでしょうか? ps や who...

テンプレートタグの使用方法の詳細な説明(Vue での使用方法の概要を含む)

目次1. HTML5のテンプレートタグ2. テンプレートタグ操作のプロパティとメソッド3. Vueの...

小さなページングデザイン

ユーザーが目的のものを探すために前進するか後退するかを選択できるようにします。たとえば、Taobao...

Ubuntu16.04にCUDA9.0をインストールするための詳細なチュートリアル

序文:この記事は、CUDA 9.0 をインストールした経験に基づいています。CUDA 9.0 は現在...

CentOS 7.4 に MySQL 5.7 を手動でインストールする方法

MySQL データベースは、特に JAVA プログラマーの間で広く使用されています。クラウド データ...

JavaScript の遅延読み込み属性パターンに関する簡単な説明

目次1. はじめに2. オンデマンド属性モード3. 乱雑な遅延読み込み属性パターン4. クラスの唯一...

CentOS 7 で Apache (httpd) サービスをインストールおよびアンインストールする詳細な手順

アンインストールまず、次のコマンドを使用して、httpd サービスがインストールされているかどうか、...

MySQL 8.0.12 のインストールと設定方法のグラフィックチュートリアル (Windows 版)

1. はじめにプロジェクトではMySQLを使用しています。インターネット上の例を参考にインストール...

SQL文のANDとORの実行順序で発生する問題

質問昨日、データベースSQLを書いているときに問題が発生しました。問題の根本は、SQL ステートメン...

CSS のインライン スタイルに変換するソリューション (css-inline)

シーンについて話すメールを送信サードパーティのウェブサイトにHTMLを埋め込む他の編集者の記事をコピ...

MySQLでよく使われるSQLとコマンドの入力からデータベースの削除、そして終了まで

目次開始と停止データベース関連の操作データベーステーブル関連の操作制約関連デフォルトの制約高度なデー...

ページコンテンツ全体を中央に配置して、高さがコンテンツに合わせて自動的に拡張されるようにする方法

ページコンテンツ全体を中央に配置する方法と、コンテンツに合わせて高さを自動的に拡大縮小する方法。これ...

Linux SecureCRT の文字化けの解決方法

SecureCRT が文字化けした文字を表示する状況を見てみましょう。例えば: ではリセットしてみま...