(JS)JavaScript動作原理


JavaScript


JavaScriptエンジン


JAvascriptエンジンはjavascriptコードを実行するプログラムまたはエンタープライズプログラムとして定義されます.
JAvascriptエンジンは標準的なinterpriterとしても静的コンパイルとしても実現できます
両方式はJITコンパイルを併用しても実現可能である.
  • 割り込みプログラム:ソースコードを直接実行するコンピュータプログラムで、
  • の方式でプログラミング言語を読み取りながらこの機能に対応するマシンコードを実行する
  • コンパイラ:ソースコードを読み込む前にマシン言語
  • に翻訳する.
  • JITコンパイラ:プログラムの実際の実行時にマシン言語にコンパイルするコンパイル方法で、同じ関数が複数回呼び出されるたびにマシンコードが生成されることを防止します.
  • JavaScriptエンジンのタイプ


    ブラウザごとに異なるエンジンが使用されます.
  • V 8:Google Chromeが使用するエンジン、C++で作られ、オープンソースです.
  • JavaScript Core:アップルがSafariのために開発したオープンソース.
  • Spider Monkey:最初のJavaScriptエンジン、Mozilla Fire Fox
  • をサポート

    V 8エンジン動作方式


    クロムのV 8エンジンはJITコンパイルに相当します.

    1) Call Stack


    JAvascriptは単一スレッド言語です.つまり、一度に一つのことしか処理できないということです.
    スレッド:オペレーティングシステムで実行されるプログラムをプロセスと呼び、そのプロセスの小さな単位です.Threedは1つのことしか処理できません.スレッドが集まるとプロセスと呼ばれます.
    callスタックとは、現在実行されているサブルーチン(関数)に関する情報を含むスタック構造のメモリ領域です.コールスタックは、プロセスが経験しているフェーズを記録します.
    (処理中の現在の状況が表示されていると言えば、分かりやすいです.)
    const function2 = (x, y) => {
        return console.log(x + y);
    }
    const function1 = (a, b) => {
      function2(a, b)
    }
    
    function1(1, 2); // 실행
    上の関数を呼び出すと、次のようなスタックスタックが表示されます.
  • ビットのように、順次スタックが上から下へ順に処理される.(後入先出)
  • 「単一スレッド」として処理されても、Web処理は後続のコンテンツに従って効率的に実行され得る.
  • 2) Web API


    JavaScriptエンジンが提供するAPIではなく、ブラウザが提供します.
    呼び出しスタック内の関数が非同期関数である場合、Web APIはその関数を呼び出します.DOMAJaxSetTimeOutなどは、Web APIで処理を完了した関数をCallback Queueに移動する.


    Callback Queue(Event Queue, Task Queue)


    Web APIが送信する非同期処理は一括して行われ,callスタックとは異なる入選特徴を持つ.(コールスタックは後入先出)
    集約された非同期関数は、イベントループの監視下に配置されます.

    Event Loop

    Event Loopは、1つのタスクのみを実行します.Call StackQueueを監視しています.
    監視中にCall Stackが空であることが判明した場合、Queueに積み上げられた非同期関数をCall Stackに送信することができる.Call Stackが空の場合、Callback Queuに蓄積された非同期関数の中で最初に入った関数が送信される.
  • このモード挙動をtickと呼ぶ.
  • 同期関数と非同期関数の順序を決定するには、
  • イベントループを使用します.
  • ソース
    リファレンス映像