LoginSignup
0
0

ブラウザでのJavaScirptの動作について

Posted at

JSの実行にかかわるもの

  • JavaScript エンジン
  • Web APIs
  • コールバックキュー
  • イベントループ

JavaScriptエンジン

仕事

JSを解析→コンパイル→実行

ブラウザによって使用されているJavaScriptエンジンは異なる。
Googleであれば、V8エンジン。

JITコンパイル

プログラミング言語には、コンパイラ言語とインタプリタ言語がある。

コンパイラ言語:実行前に実行可能ファイルへと変換し、それを実行する形式。
インタプリタ言語:実行しながら評価する形式。

JavaScriptはその中間である、JITコンパイラが使用されている。
JITコンパイラは頻繁に実行されるコードや実行に時間がかかるコードをマシンコードにコンパイルする形式。

実行までの流れ

parsing

コードを解析し、AST(抽象構文木)と呼ばれるデータ構造を作成する。

compile

頻繁に実行されるコードをコンパイルする。

execute

作成したコードを実行する。
コンパイル部分はそのまま実行。
そうでない部分は評価し実行。

optimized

頻繁に実行されるコードなどコンパイルすべき部分を決定する。

Web APIs

ブラウザによって提供されているAPI。
DOMやFetch、consoleなどがある。

コールバックキュー

JavaScriptエンジンは同時に一つの処理しか実行できない。
次に処理されるものが待機する場所。

タスクキュー

  • ユーザーイベント(クリック、キーボード入力など)
  • setTimeoutやsetIntervalなどのタイマー
  • I/O操作(ネットワークリクエスト、ファイル読み込みなど)
    上記のコールバック関数のことをタスクと呼び、タスクキューに格納される。

マイクロタスクキュー

  • Promiseの処理(then、catch、finally)
  • MutationObserverのコールバック
  • queueMicrotask関数
    上記のコールバック関数をマイクロタスクと呼び、マイクロタスクキューに格納される。

上記二つのキューの違いは優先度。
マイクロタスクキューの方が高い。

イベントループとは

コールスタックが空になるたびにコールバックキューからタスクを取り出して、追加すること。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0