V8是如何執行一段JavaScript代碼的

AST是一種很是重要的數據結構
Babel的原理就是將ES6/7的源碼轉化爲AST,將AST轉化爲ES5的AST,最後生成JavaScript目標代碼
ESLint也是檢查代碼的AST結構
V8是如何執行一段JavaScript代碼的瀏覽器

一. 生成AST和執行上下文

分詞,詞法分析,將源代碼拆分紅一個個不能再細分的單元——token
解析,語法分析,將上述的token根據語法規則生成AST
有了AST後,V8會生成該段代碼的執行上下文數據結構

二. 生成字節碼

解釋器Ignition將AST生成字節碼,並解釋執行字節碼。
一開始的V8室沒有字節碼的,是直接將AST轉化爲機器碼,因爲執行的是機器碼,效率很高,這種方式在發佈後效果很是好,可是隨着移動互聯網的普及,內存問題暴露無遺。機器碼須要佔用大量的空間,因此移動設備的內存容量告急。
字節碼須要經過解釋器將其轉換爲機器碼後才能執行。token

三. 執行代碼

一般,第一次執行的字節碼,解釋器Ignition會逐條解釋並執行,在執行過程當中,若是發現熱點代碼,則後臺編譯器TurboFan將該段字節碼編譯成機器碼,當再次執行該片斷的時候,就執行機器碼。ip

參考:《瀏覽器的工做原理和實踐》內存

相關文章
相關標籤/搜索