script - V8


Javascript Engine


JAvascriptエンジンはjavascriptコードを実行するプログラム/インタフェースです.
JavaScriptのエンジンはブラウザだけでなく、異なる場所で実行できます.
代表的なのはGoogleのV 8エンジンMSのChakraエンジンMozillaのSpiderMonkeyなど.
その中でChrome Node典型的なV 8エンジンはjs、Electronなどを含む.
以下に示すJavaScriptエンジンはすべてV 8エンジンに基づいています.

V8


V 8エンジンはGoogleが開発したオープンソースエンジンで、C++言語で作成されています.
Just in timeコンパイラとして、コードの実行時に中間コード(バイトコードなど)は生成されません.
コンピュータの言語でマシンコードをコンパイルします.

hidden class


JavaScriptのオブジェクトの数は不明で、動的に追加および削除されます.
変形可能です.オブジェクトは複雑なデータ構造であり、オブジェクトを管理する方法は元の値(number,string...)である.
それに比べて各ブラウザは複雑で、JavaやC++などのクラスベースのオブジェクト向け言語では、
事前定義されたclassに基づいてオブジェクト(インスタンス)を作成し、オブジェクトを作成した後、classで事前定義された内容とは異なるフォーマットに変換することはできません.
ただし、クラスなしでオブジェクトを作成できます.
const 객체 = {a: 1, b: 2 c: 'c'};
作成後、Propertyとメソッドはいつでも作成または変換できます.使いやすく、
class言語ベースのオブジェクトにアクセスするよりもコストがかかります.
したがって、V 8エンジンは、hidden classと呼ばれる方法を使用して、C++のオブジェクトへのアクセスを保証する.
非効率なオブジェクトのブラウズを回避するために、オブジェクトの作成時にhidden classというオブジェクトを作成します.
各オブジェクトのオフセット情報を格納します.非表示クラスには、次のフィーチャーがあります.
各オブジェクトには
  • が付与.
  • それぞれの属性を有するオフセット情報
  • .
  • プロパティを追加、変更、削除すると、新しい非表示クラスが作成されます.
    参照するhidden class情報が追加されます.
  • let goyangyi = {};
    以下のオブジェクトが生成される瞬間、V 8はGoyangyiに対するhidden class[A 1]を生成する.
    このとき[A 1]には何の情報もない.
    let goyangyi = {};
    goyangyi.food = 'fish';
    propertyを作成した瞬間にhidden classが現れる[A 2].
    呉陽儀は『A 2』を教える.[A 1]にfood propertyを追加して参照
    hidden classがA 1からA 2に変更されたことを示す情報が追加されます.
    これを遷移と言います.
    これらのプロシージャが連続的に発生すると、オブジェクトのhidden classループが作成されます.
    新しいインスタンスを作成するたびに、定義済みhidden classループに沿って上に登り、同じオフセットを検索して使用します.

    Inline caching