站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        拿下JavaScript引擎的基本原理

        作為JavaScript欄目開發(fā)人員,深入了解 JavaScript 引擎的工作原理有助于你了解自己代碼的性能特征。這篇文章對所有 JavaScript 引擎中常見的一些關(guān)鍵基礎(chǔ)知識進(jìn)行了介紹,不僅僅局限于 V8 引擎。

        JavaScript 引擎的工作流程 (pipeline)

        這一切都要從你寫的 JavaScript 代碼開始。JavaScript 引擎解析源代碼并將其轉(zhuǎn)換為抽象語法樹(AST)。基于 AST,解釋器便可以開始工作并生成字節(jié)碼。就在此時,引擎開始真正地運行 JavaScript 代碼。拿下JavaScript引擎的基本原理為了讓它運行得更快,字節(jié)碼能與分析數(shù)據(jù)一起發(fā)送到優(yōu)化編譯器。優(yōu)化編譯器基于現(xiàn)有的分析數(shù)據(jù)做出某些特定的假設(shè),然后生成高度優(yōu)化的機器碼。

        如果某個時刻某一個假設(shè)被證明是不正確的,那么優(yōu)化編譯器將取消優(yōu)化并返回到解釋器階段。

        JavaScript 引擎中的解釋器/編譯器工作流程

        現(xiàn)在,讓我們來看實際執(zhí)行 JavaScript 代碼的這部分流程,即代碼被解釋和優(yōu)化的部分,并討論其在主要的 JavaScript 引擎之間存在的一些差異。

        一般來說,JavaSciript 引擎都有一個包含解釋器和優(yōu)化編譯器的處理流程。其中,解釋器可以快速生成未優(yōu)化的字節(jié)碼,而優(yōu)化編譯器會耗費更長的時間,但最終可生成高度優(yōu)化的機器碼。拿下JavaScript引擎的基本原理這個通用流程和 Chrome 和 Node.js 中使用的 Javascript 引擎, V8 的工作流程幾乎一致:拿下JavaScript引擎的基本原理V8 中的解釋器稱為 Ignition,負(fù)責(zé)生成和執(zhí)行字節(jié)碼。當(dāng)它運行字節(jié)碼時,它收集分析數(shù)據(jù),這些數(shù)據(jù)可用于后面加快代碼的執(zhí)行速度。當(dāng)一個函數(shù)變?yōu)?hot 時,例如當(dāng)它經(jīng)常運行時,生成的字節(jié)碼和分析數(shù)據(jù)將傳遞給我們的優(yōu)化編譯器 Turbofan,以根據(jù)分析數(shù)據(jù)生成高度優(yōu)化的機器代碼。拿下JavaScript引擎的基本原理Mozilla 在 Firefox 和 Spidernode 中使用的 JavaScript 引擎 SpiderMonkey ,則不太一樣。它們有兩個優(yōu)化編譯器,而不是一個。解釋器先通過 Baseline 編譯器,生成一些優(yōu)化的代碼。然后,結(jié)合運行代碼時收集的分析數(shù)據(jù),IonMonkey 編譯器可以生成更高程度優(yōu)化的代碼。如果嘗試優(yōu)化失敗,IonMonkey 將返回到 Baseline 階段的代碼。

        Chakra,在 Edge 中使用的 Microsoft 的 JavaScript 引擎,非常相似的,也有2個優(yōu)化編譯器。解釋器優(yōu)化代碼到 SimpleJIT(JIT 代表 Just-In-Time 編譯器,即時編譯器),SimpleJIT 會生成稍微優(yōu)化的代碼。而 FullJIT 結(jié)合分析數(shù)據(jù),可以生成更為優(yōu)化的代碼。拿下JavaScript引擎的基本原理JavaScriptCore(縮寫為 JSC),在 Safari 和 React Native 中使用的 Apple 的 JavaScript 引擎,它通過三種不同的優(yōu)化編譯器將其發(fā)揮到極致。低層解釋器 LLInt 優(yōu)化代碼到 Baseline 編譯器中,然后優(yōu)化代碼到 DFG(Data Flow Graph)編譯器中,DFG(Data Flow Graph)編譯器又可以將優(yōu)化后的代碼傳到 FTL(Faster Than Light)編譯器中。

        為什么有些引擎有

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 午夜精品美女自拍福到在线| 精品无码人妻一区二区三区不卡| 中国精品videossex中国高清 | 欧美人与动牲交a欧美精品| 99热在线日韩精品免费| 亚洲国产精品一区二区久久hs| 国亚洲欧美日韩精品| 欧美性videofree精品| 国产精品三级国产电影| 无码精品国产VA在线观看| 欧美日韩精品一区二区三区不卡 | 精品人妻久久久久久888| 亚洲精品tv久久久久| 久久精品国产欧美日韩| 办公室久久精品| 精品国内片67194| 97久久国产亚洲精品超碰热| 久久久精品人妻一区二区三区蜜桃 | 国产欧美日本亚洲精品一5| 久久精品中文字幕久久| 国产欧美国产精品第一区| 国产午夜精品一区二区三区| 熟女精品视频一区二区三区| 亚洲精品国产美女久久久| 亚洲伊人久久精品影院| 亚洲无码日韩精品第一页| 亚洲欧美日韩国产精品影院| 久久激情亚洲精品无码?V| 国内精品久久久久久久久电影网 | 久久精品国产精品国产精品污| 国产91精品在线观看| 久久99国产精品久久99果冻传媒| 国产精品免费观看| 国产91久久精品一区二区| 国产原创精品视频| 久久国产精品-国产精品| 久久久国产精品福利免费| 亚洲精品天天影视综合网| 国产精品日韩欧美在线第3页| 国产精品无码久久综合网| 精品国产污污免费网站入口|