- 什麼是V8?
- V8整體執行流程
- V8流程細節分析
什麼是V8?
V8 是 Google 的開源高效能 JavaScript 和 WebAssembly 引擎,用 C++ 編寫。它用於 Chrome 和 Node.js 等。它實現了ECMAScript和WebAssembly,並在 Windows 7 或更高版本、macOS 10.12+ 以及使用 x64、IA-32、ARM 或 MIPS 處理器的 Linux 系統上執行。V8 可以獨立執行,也可以嵌入到任何 C++ 應用程式中。
V8整體執行流程
名詞解釋:
- source code: Javascript
- Parser 處理為AST的Parser(解析器)
- AST 抽象語法樹
- Ignition 直譯器 將AST轉換為byteCode
- Sparkplug 無優化編譯器 可以理解為將byteCode預編譯(非常的快速)
- byteCode execute 位元組碼 可以理解為跨平臺的一種編碼(非平臺機器碼)
- Turbofan 優化編譯器 對於byteCode進行編譯並對於程式碼進行優化
- Machine Code 機器碼 各平臺執行的程式碼
V8 流程細節分析
Source Code
就是指Javascript原始碼 至於你開發中使用的是TypeScript,在進入瀏覽器之前也是需要編譯成Js的 可以理解為V8只識別JS。
下邊拿一個函式進行分析:
function add(x,y){ // <- top level code 解析環節。
return x + y; // <- non top level
}
parser
parser部分,瞭解過編譯的同學都知道有詞法分析,語法分析...
AST
AST是指原始碼的抽象語法結構的樹狀表現形式.
Ignition ==> byteCode
Parser過後就是生成位元組碼 這個是V8內部的類BytecodeGenerator
進行生成的。
Turbofan
Turbofan是根據位元組碼和熱點函式反饋型別生成優化後的機器碼,Turbofan很多優化過程,基本和編譯原理的後端優化差不多,採用的sea-of-node。
Sparkplug
Sparkplug 旨在快速編譯。 非常快。 速度如此之快,幾乎可以隨時編譯,所以能夠比 TurboFan 程式碼更積極地對 Sparkplug 程式碼進行分層。
- Sparkplug所編譯的是byteCode
- Sparkplug編譯不做優化
- Sparkplug只需要與解析器Ignition行為映象 不需要某種狀態的對映
- ...
最後
倆件事:
- 視覺化相關的架構設計,原始碼學習,日常開發。我會逐步進行深入分享。如果對你有幫助請關注我後續的內容。有需要的同學可以加一下我的聯絡方式(在我的主頁,拉你進群聊)。
javascript相關內容進階聯絡我主頁微信,嗯就這樣。 bye~
哦對, 還有一件事 祝各位女神,女神節快樂。 BYE~