国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript深入V8引擎以及編寫優(yōu)化代碼的5個技巧

2024-05-06 15:37:32
字體:
來源:轉載
供稿:網友

概述

JavaScript引擎是執(zhí)行 JavaScript 代碼的程序或解釋器。JavaScript引擎可以實現為標準解釋器,或者以某種形式將JavaScript編譯為字節(jié)碼的即時編譯器。

以為實現JavaScript引擎的流行項目的列表:

V8 — 開源,由 Google 開發(fā),用 C ++ 編寫 Rhino — 由 Mozilla 基金會管理,開源,完全用 Java 開發(fā) SpiderMonkey — 是第一個支持 Netscape Navigator 的 JavaScript 引擎,目前正供 Firefox 使用 JavaScriptCore — 開源,以Nitro形式銷售,由蘋果為Safari開發(fā) KJS — KDE 的引擎,最初由 Harri Porten 為 KDE 項目中的 Konqueror 網頁瀏覽器開發(fā) Chakra (JScript9) — Internet Explorer Chakra (JavaScript) — Microsoft Edge Nashorn, 作為 OpenJDK 的一部分,由 Oracle Java 語言和工具組編寫 JerryScript —  物聯網的輕量級引擎

為什么要創(chuàng)建V8引擎?

由谷歌構建的V8引擎是開源的,使用c++編寫。這個引擎是在谷歌Chrome中使用的,但是,與其他引擎不同的是 V8 也用于流行的 node.js。

V8最初被設計用來提高web瀏覽器中JavaScript執(zhí)行的性能。為了獲得速度,V8 將 JavaScript 代碼轉換成更高效的機器碼,而不是使用解釋器。它通過實現 JIT (Just-In-Time) 編譯器將 JavaScript 代碼編譯為執(zhí)行時的機器碼,就像許多現代 JavaScript 引擎(如SpiderMonkey或Rhino (Mozilla)) 所做的那樣。這里的主要區(qū)別是 V8 不生成字節(jié)碼或任何中間代碼。

V8 曾有兩個編譯器

在 V8 的 5.9 版本出來之前,V8 引擎使用了兩個編譯器:

full-codegen — 一個簡單和非常快的編譯器,產生簡單和相對較慢的機器碼。 Crankshaft — 一種更復雜(Just-In-Time)的優(yōu)化編譯器,生成高度優(yōu)化的代碼。

V8 引擎也在內部使用多個線程:

主線程執(zhí)行你所期望的操作:獲取代碼、編譯代碼并執(zhí)行它 還有一個單獨的線程用于編譯,因此主線程可以在前者優(yōu)化代碼的同時繼續(xù)執(zhí)行 一個 Profiler 線程,它會告訴運行時我們花了很多時間,讓 Crankshaft 可以優(yōu)化它們 一些線程處理垃圾收集器

當第一次執(zhí)行 JavaScript 代碼時,V8 利用 full-codegen 編譯器,直接將解析的 JavaScript 翻譯成機器代碼而不進行任何轉換。這使得它可以非常快速地開始執(zhí)行機器代碼。請注意,V8 不使用中間字節(jié)碼,從而不需要解釋器。

當代碼已經運行一段時間后,分析線程已經收集了足夠的數據來判斷應該優(yōu)化哪個方法。

接下來,Crankshaft  從另一個線程開始優(yōu)化。它將 JavaScript 抽象語法樹轉換為被稱為 Hydrogen 的高級靜態(tài)單分配(SSA)表示,并嘗試優(yōu)化 Hydrogen 圖,大多數優(yōu)化都是在這個級別完成的。

內聯代碼

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 星座| 方山县| 韶关市| 安庆市| 托克托县| 赞皇县| 宝鸡市| 韩城市| 宝坻区| 怀远县| 霞浦县| 上犹县| 高安市| 英吉沙县| 永昌县| 平利县| 新晃| 海晏县| 丰顺县| 淅川县| 资溪县| 蛟河市| 遂昌县| 大埔区| 湘西| 滨州市| 吴忠市| 锦州市| 松江区| 霞浦县| 珲春市| 武义县| 望江县| 古交市| 重庆市| 武川县| 商都县| 广饶县| 华安县| 郸城县| 灌阳县|