2024-05-09|閱讀時間 ‧ 約 22 分鐘

揭秘 JavaScript:V8 引擎如何啟動你的程式碼

如果你曾經撰寫過網頁,那你一定接觸過 JavaScript
無論是在 NodeJs 或是瀏覽器中運行。

但你有沒有想過,我們寫下的 JS 程式碼,這些看似單純的英文和符號,是如何被轉化為機器能夠理解和執行的程式呢?

今天,讓我們一起深入了解其中的核心主角
——Google 開發的開源 JavaScript 引擎:V8。
V8 是眾多 JavaScript 引擎中的佼佼者,但今天我們專注於它是如何魔法般地啟動你的程式。

首先,V8 引擎會把我們的 JS 程式碼,這一大串文字,交給解析器。

解析器的工作是找出程式碼中的關鍵元素,如函數名稱、變數宣告等,並將它們組織成一個稱為抽象語法樹(AST)的結構。

這個結構不僅存儲變數和命令,還記錄它們的執行順序,為接下來的處理階段做好準備。

而 AST 將被送到下一個的流程 Ignition 它就像火星一樣負責點燃了引擎,啟動你的程式 它負責將我們的 JavaScript 程式碼編譯成 ByteCode

ByteCode 是一種相當底層的程式語言,它已經相當接近能直接被機器執行的機器語言,基本上這個程式直接丟給 JS 虛擬機,就可以直接 run 起來但這還不夠,快還要更快


V8 引擎設計了第二套系統 TurboFan

TurboFan 會與 Ignition 合作,取得各個 function的執行情況、哪些特別常被執行、哪些 function 型別其實是固定的,並且在進一步的編譯成最快的 MachineCode (最佳化)Ignition 負責啟動程式碼,TurboFan 則負責優化和加速

這兩套系統構建出了一個很強大的特性 【JIT 即時編譯】 既擁有編譯語言的高速,用擁有直譯語言的靈活

這就是 V8 引擎


V8 引擎編譯流程


分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.