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

推薦する

WeChatアプレットAmapマルチポイントルート計画プロセス例の詳細な説明

電話Amap API を呼び出す方法は? Amap が https://lbs.amap.com/a...

CentOS 7 で Python を 3.6.6 にアップグレードした後に発生する yum エラー問題の解決方法の概要

最近、テスト サーバーのオペレーティング システムを Cent0S 7.5 にアップグレードし、Py...

Vueベースのカスタムコンポーネントを実装してアイコンを導入する

序文プロジェクト開発では、アイコンを使用する方法はたくさんあります。iconfont で適切なアイコ...

Windows サーバー ポートを開きます (例としてポート 8080 を使用します)

ポートとは何ですか?私たちが通常参照するポートは、物理的な意味でのポートではなく、具体的には TCP...

autoconfを使用してMakefileを生成し、プロジェクトをコンパイルする手順

序文Linux では、コンパイルとリンクには Makefile を使用する必要がありますが、適切な ...

同じ日の最初の3つのデータを取得するためのMySQLタイムラインデータ

テーブルデータを作成する テーブル `praise_info` を作成します ( `id` bigi...

JavaScript 配列のマージのケーススタディ

方法1: var a = [1,2,3]; var b = [4,5] b を連結します。 コンソー...

Windows Server 2008 64ビット MySQL5.6 インストール不要版 設定方法図

1 公式ウェブサイトから MySQL 5.6 バージョンの圧縮パッケージmysql-5.6.36-w...

ウェブページ HTML 順序付きリスト ol と順序なしリスト ul

データを整理するためのリストWeb ページの表示を制御する多数の HTML タグを学習した後、読者は...

DockerにRedisコンテナをインストールするための実装手順

目次DockerにRedisをインストールする1. Redisイメージを見つける2. Redisイメ...

MySQL メタデータで Hive テーブル作成ステートメントのコメント スクリプトを生成する方法

序文この記事は主にMySQLメタデータ生成Hiveテーブル作成ステートメントコメントスクリプトに関す...

JavaScript コードベースをよりクリーンにする 5 つの方法

目次1. 短絡や条件文の代わりにデフォルトのパラメータを使用する2. 複数の条件の処理3. スイッチ...

Linux で推奨される 9 つの優れたコード比較ツールの概要

コードを書くとき、2 つのファイル間の違い、または同じファイルの異なるバージョン間の違いを知る必要が...