①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編譯為機器碼,並保存起來,下次就可以直接使用了,省去了將字節碼轉換為機器碼的過程,提升了執行效率;
