v8引擎是如何執行一段js代碼的?


①AST(Abstract Syntax Tree):抽象語法樹,一種數據結構

②HotSpot:熱點代碼,多次出現的代碼

③Bytecode:字節碼

④Machine code:機器碼

⑤Ingition:解釋器,將AST轉換為Bytecode

⑥TurBoFan:編譯器,將Bytecode轉換為Machine code

⑦JIT(ust-in-time compilation):即時編譯,運行的時候編譯執行

 

 

1.AST的解釋以及生成過程:

  1.1.AST是很重要的一種數據結構,Babel和Eslint的工作原理就是先將源代碼轉換為AST,然后再進行其他操作

  1.2.AST的生成過程:先分詞,再解析:先將源代碼拆分為一個個token(不可再分的字符或者字符串),然后將token解析為AST

2.js引擎理解:

  2.1.是用來處理js代碼的一段程序或者解釋器,對原代碼進行詞法分析和語法分析后生成AST,基於AST再生成字節碼,從而執行代碼。

 

  2.2.執行過程:

    2.2.1.語法分析階段:對加載完成的代碼進行語法檢驗,檢驗完成后進入預編譯階段;

    2.2.2.預編譯階段:搜集函數名以及變量提升,確定this指向和作用域鏈

    2.2.3執行階段:通過事件循環執行

3.v8引擎:

  3.1.v8引擎是js引擎的一種,其特點是提高js執行性能

  3.2.v8執行代碼過程:

    3.2.1.將源代碼生成AST:源代碼進行詞法分析和語法分析后生成AST

    3.2.2.生成字節碼:根據AST生成字節碼,字節碼通過Ingition轉換為機器碼才能執行

    3.2.3.執行代碼:如果一段字節碼是第一次執行,解釋器會逐行執行;如果在執行字節碼過程中發現有HotSpot,JIT即時編譯器就會把HotSpot編譯為機器碼,並保存起來,下次就可以直接使用了,省去了將字節碼轉換為機器碼的過程,提升了執行效率;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM