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

推薦する

システムメンテナンスページにリダイレクトするように nginx を設定する

先週末、兄弟プロジェクトはより良いサービスを提供するためにサーバーを拡張する準備をしていました。兄弟...

データ URI スキームを使用して Web ページに画像を埋め込む方法の紹介

データ URI スキームを使用すると、HTML、CSS、Javascript などで使用できるインラ...

vue.js ベースの QQ チャット ルーム

目次導入効果のデモンストレーションは次のとおりです。 MChat コンポーネントのレンダリング: I...

ウェブデザインでは、まずウェブサイトの包括的なイメージの位置付けが必要です。

⑴ 内容によって形式が決まります。まず内容を充実させ、次にブロックに分割し、トーンを決め、最後に細部...

CentOS 7 で MySQL 5.7.23 をアップグレードする際の落とし穴と解決策

序文最近、CentOS 7 で MySQL 5.7.23 をアップグレードする際に落とし穴を発見しま...

MySQL8.0.18 複数マスターと 1 スレーブの構成

目次1. 現実的な背景2. 合意3. マスターを構成する3.1. 起動パラメータの設定3.2. パラ...

Nginx アクセス ログとエラー ログ パラメータの説明

例: nginx ログには、アクセス ログとエラー ログの 2 つの主な種類があります。アクセス ロ...

Vmvare 仮想マシンを使用して Ubuntu のルート ディレクトリをパーティション分割する方法の紹介

目次序文根拠手順1. CDから仮想マシンを起動する2. GPartedツールを使用してパーティション...

vuexサードパーティパッケージを使用してデータの永続性を実装する方法

目的: vuex で管理されている状態データを同時にローカルに保存できるようにします。独自のストレー...

テーブル関連の配置とJavascript操作テーブル、tr、td

適切に機能するテーブル プロパティ設定:コードをコピーコードは次のとおりです。 <テーブル セ...

Vueでファジークエリを実装する方法の簡単な例

序文いわゆるファジークエリとは、ユーザーの完全な入力やすべての入力情報がなくてもクエリサービスを提供...

Linux での fuser コマンドの使用法の詳細な説明

説明する: fuser は、現在ディスク上のファイル、マウント ポイント、さらにはネットワーク ポー...

Centos7.5 構成 Java 環境のインストール Tomcat の説明

Tomcat は Java 言語をベースにした Web サーバー ソフトウェアです。この記事では主に...

Vue マルチ選択リスト コンポーネントの詳細な説明

マルチ選択は、すべてのオプションを一覧表示し、ユーザーが Ctrl/Shift キーを使用して複数選...