日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

今天給大家帶來的主題是“全網10+最優秀的JAVAScript引擎”,一部分是拿來即用的開源JavaScript引擎、另一部分是瀏覽器本身內置的JavaScript引擎介紹。話不多說,直接開始!

jerryscript

JerryScript 是一個輕量級的 JavaScript 引擎,用于資源受限的設備,例如:微控制器。 它可以在 RAM 小于 64 KB 和閃存 ROM 小于 200 KB 的設備上運行。


 

JerryScript 的主要特征:

 

  • 完全符合 ECMAScript 5.1 標準
  • 為 ARM Thumb-2 編譯時為 160K 二進制大小
  • 針對低內存消耗進行了大量優化
  • 用 C99 編寫以實現最大的可移植性
  • 快照支持將 JavaScript 源代碼預編譯為字節碼
  • 成熟的C API,易于嵌入應用

 

JerryScript是物聯網場景的首選JavaScript 引擎,其支持設備上的編譯、執行,并提供從 JavaScript 訪問外圍設備的功能。

目前JerryScript在Github上有超過6.5k的star、660+的fork、超過100+的代碼貢獻者,是一個值得長期關注的項目。

Duktape

Duktape 是一個可嵌入的 Javascript 引擎,專注于可移植性和緊湊性(Compact Footprint)。Duktape 很容易集成到 C/C++ 項目中:將 duktape.c、duktape.h 和 duk_config.h 添加到構建中,并使用 Duktape API 從 C 代碼調用 ECMAScript 函數,反之亦然。


 

Duktape的主要特點包括:

 

  • 可嵌入、便攜、緊湊
  • ECMAScript E5/E5.1 兼容,從 ES2015+ 更新了一些語義
  • 部分支持 ECMAScript 2015 (E6) 和 ECMAScript 2016 (E7)、Post-ES5 功能狀態、kangax/compat-table
  • ES2015 TypedArray 和 Node.js 緩沖區綁定
  • WHATWG 編碼 API 生活標準
  • 內置調試器、正則表達式引擎、Unicode 支持、協程等自定義功能
  • 最小的平臺依賴性、結合引用計數和帶終結的標記清除垃圾收集
  • 使用 ECMAScript ES2015 代理對象子集的屬性虛擬化(Property virtualization)
  • 用于緩存編譯函數的字節碼轉儲/加載
  • 包括分發時可選的日志記錄框架、基于 CommonJS 的模塊加載器、CBOR綁定等
  • 基于MIT 自由許可證開源

 

目前Duktape在Github上有超過5.5k的star、510+的fork、超過60+的代碼貢獻者,是一個值得長期關注的項目。

MuJS

MuJS 是一個輕量級Javascript 解釋器,設計用于嵌入其他軟件中以擴展它們的腳本功能。


 

MuJS 的設計重點是體積、正確性和簡單性。 它是用可移植的 C 語言編寫的,并按照 ECMA-262 的規定實現了 ECMAScript。 與本地代碼綁定的接口被設計為盡可能簡單易用,與 Lua 非常相似,無需與byzantine C++ 模板機制交互,或擔心標記和取消標記垃圾收集根,或與晦澀的構建系統。

MuJS 由 Artifex Software 開發和維護。 它最初是為與 MuPDF 查看器一起使用而開發的,但被設計為作為一個獨立的組件使用。目前,MuJS 是在 ISC 許可證下分發的免費開源軟件。

目前MuJS在Github上有超過0.7k的star、80+的fork、超過12+的代碼貢獻者,是一個值得長期關注的項目。

QuickJS

FFmpeg 和 QEMU 的創建者 Fabrice Bellard 以及 C 語言專家 Charlie Gordon 在 2019 年宣布開源 QuickJS , QuickJS 在 MIT 許可下發布,是一個“小而完整的JavaScript引擎”。

圖片來自:https://flutterawesome.com/a-quickjs-engine-for-flutter/

在性能方面,QuickJS 明顯優于其他可選方案。例如:在 bench-v8 測試中,QuickJS 領先 DukTape 一倍多,領先 JerryScript 三倍,領先 MuJS 七倍。

除了性能優勢外,QuickJS 還有以下特點:

 

  • 小巧且易于嵌入:只有幾個 C 文件,沒有外部依賴。一個簡單的 hello world 程序編譯為 x86 后只有 210 KB
  • 解釋器啟動時間極短:在臺式 PC 的單核上運行 ECMAScript 測試套件的 75000 個測試大約需要 100 秒,運行時實例的完整生命周期在不到 300 微秒內就可以完成。
  • 支持完整的 ES2020,包括模塊、異步生成器和完整的 Annex B 支持(舊版 Web 兼容性)。
  • 選擇 ES2020 特性時,幾乎 100% 通過了 ECMAScript Test Suite 測試。
  • 可沒有外部依賴的情況下將 Javascript 源代碼編譯為可執行文件
  • 使用引用計數(以減少內存使用并具有確定性行為)和循環刪除的垃圾收集模式。
  • 支持數學擴展:BigDecimal、BigFloat、運算符重載、bigint 模式、數學模式。
  • 在 Javascript 中實現上下文著色命令行解釋器、帶有 C 庫包裝器的小型內置標準庫。

 

關于QuickJS的更多內容可以繼續閱讀我的另一篇文章:

 

  • 《什么原因讓我堅決選擇 QuickJS ?》

 

目前 QuickJS 在Github上有超過5.8k的star、600+的fork、超過100+的代碼貢獻者。

Espruino

Espruino 是一個微處理器的 JavaScript 解釋器,基于它創建了首個 JavaScript 微處理器 Espruino Board。Espruino 在國外知名的眾籌平臺KickStarter上發布之后才被人知曉,其發明人是來自英國的Gordon Williams。


 

Espruino是一種運行在微控制器上的軟件,實現了Javascript解釋器的功能,因此你只要會用Javascript,就可以對微控制器進行編程,釋放自己的創意,diy出自己的電子作品。

Espruino開發板是一個小電腦,任何人都可以利用它去控制身邊的東西,由JavaScript解釋器實時反饋,因此不強依賴開發經驗。只要把Espruino開發板插到電腦上,使用Chrome Web IDE或喜歡的終端應用程序,就可以馬上編寫程序。

Espruino的事件驅動特性使它非常省電,低至0.1mA的功耗,即使使用普通的5號電池也能運行好幾年,如果用上一個小的太陽能電池,那就可以永久使用了。

目前Espruino的軟件和硬件都是開源的。目前 Espruino 在Github上有超過2.6k的star、710+的fork、超過110+的代碼貢獻者。

V7

V7 是用 C 編寫的最小的 JavaScript 引擎,用于 C/C++ 的嵌入式 JavaScript 引擎。


 

V7 的顯著特點如下:

 

  • 跨平臺:適用于任何平臺,從 Arduino 到 MS windows
  • 文件小尺寸: 編譯的靜態文件大小在 40k - 120k 范圍內,初始化時的 RAM 占用空間約為 800 字節,有凍結功能,不過 15k 沒有凍結功能
  • 簡單直觀的 C/C++ API:很容易將現有的C/C++函數導出到JavaScript環境中
  • 標準:V7 實現 JavaScript 5.1
  • 開箱即用:V7 提供一個帶有硬件(SPI、UART 等)、文件、加密、網絡 API 的輔助庫
  • 源代碼符合 ISO C 和 ISO C++
  • 非常容易集成:只需將兩個文件:v7.h 和 v7.c 復制到開發項目中

 

V7 使得使用 JavaScript 對物聯網 (IoT) 嵌入式設備進行編程成為可能,是完整堆棧 Mongoose OS 平臺的一部分。不過需要注意的是:V7項目目前已棄用,取而代之的是下面的mJS.

目前Espruino的軟件和硬件都是開源的。目前 Espruino 在Github上有超過2.6k的star、710+的fork、超過110+的代碼貢獻者。

mJS

mJS 專為資源有限的微控制器而設計。 主要設計目標是:占用空間小和簡單的 C/C++ 互操作性, mJS 實現了 ES6(JavaScript 版本 6)的嚴格子集:

 

  • 任何有效的 mJS 代碼都是有效的 ES6 代碼。
  • 任何有效的 ES6 代碼不一定是有效的 mJS 代碼。

 

在 32 位 ARM 上,mJS 引擎需要大約 50k 的閃存和不到 1k 的 RAM。 mJS 是 MongooseoS 的一部分,它支持為物聯網設備編寫腳本。

mJS有一些明顯的局限性,比如:

 

  • 沒有標準庫。 沒有字符串、數字、正則表達式、日期、函數等。
  • 沒有閉包,只有詞法作用域(即允許嵌套函數)。
  • 沒有new操作, 要創建具有自定義原型的對象,請使用可用的 Object.create()。
  • 僅限嚴格模式,沒有 var,只有 let。
  • 沒有 for..of、=>、析構函數、生成器、Proxy、Promise。
  • 沒有 == 或 !=,只有 === 和 !==。

 

更多限制性可以參考文末參考資料,這里不做過多列舉。目前 mJS 在Github上有超過1.7k的star、160+的fork、超過10+的代碼貢獻者。

quickjs-emscripten

quickjs-emscripten 是QuickJS 的 Javascript/TypeScript 綁定,一種現代 Javascript 解釋器,編譯為 WebAssembly。quickjs-emscripten具有以下明顯特點:

 

  • 安全執行不受信任的 Javascript(最高 ES2020)。
  • 在 QuickJS 運行時內創建和操作值。
  • 將宿主函數暴露給 QuickJS 運行時。
  • 使用 asyncify 執行使用異步函數的同步代碼。
import { getQuickJS } from "quickjs-emscripten" async function main() { const QuickJS = await getQuickJS() const vm = QuickJS.newContext() const world = vm.newString("world") vm.setProp(vm.global, "NAME", world) world.dispose() const result = vm.evalCode(`"Hello " + NAME + "!"`) if (result.error) { console.log("Execution failed:", vm.dump(result.error)) result.error.dispose() } else { console.log("Success:", vm.dump(result.value)) result.value.dispose() } vm.dispose() } main()

 

除了quickjs-emscripten 外,還有wasm-jseval、wasmedge-quickjs、tiny-js、JScript .NET 、Tamarin、GNU Guile、Nashorn 、iv 、CL-JavaScript 、BESEN 、Hermes 、Graal.js 、Continuum 、Futhark、InScript 、JScript 、Jint 、Narcissus 、QtScript等特定場景的JavaScript引擎實現,這里不再進一步展開,可以在參考資料中找到它們的相關介紹。

目前 quickjs-emscripten 在Github上有超過0.8k的star、65+的fork、超過10+的代碼貢獻者,使用的項目數130+。

瀏覽器內置引擎 V8

V8是google開源的 JavaScript 和 WebAssembly 引擎,用C++編寫,它用于 Chrome 和 Node.js 等場景。支持 Windows7或更高版本、macOS10.12+ 以及使用x64、IA-32 或ARM處理器的linux 系統上運行。其他系統(IBM i、AIX)和處理器(MIPS、ppcle64、s390x)由外部維護。

V8可以獨立運行,也可以嵌入到任何C++應用程序中。

SpiderMonkey

SpiderMonkey 是 Firefox 和 Mozilla 的 Javascript 引擎,現在SpiderMonkey可以被單獨編譯,即可以在自己的應用程序中使用它,下載地址是:http://ftp.mozilla.org/pub/mozilla.org/js/。SpiderMonkey 是用 C 實現,還有一個叫做 Rhino的 Java版本。

SpiderMonkey 的源代碼可以在多種平臺上進行編譯。在 Windows 平臺下,按照下載文件中的 readme 文件中的提示,會編譯出一個 Dll,然后可以在應用程序中使用這個 Dll。

JavaScriptCore (JSC)

JavaScriptCore (JSC) 是 Safari、Mail、App Store 和 MacOS 中許多其他應用程序使用的 JavaScript 引擎。 JSC 引擎負責執行每一行 JavaScript (JS),比如瀏覽到新網站或發送/接收電子郵件時。

如今前端最火的運行時Bun(旨在替代 Node.js,其是用 Zig 編寫的)就是由 JavaScriptCore 提供支持,從而大大減少了啟動時間和內存使用量。目前,Bun也號稱是前端最快的JS運行時。

Chakra

Chakra 是微軟 2008 年新創建的一個JavaScript 引擎,其基本構建原則是要具備現代Web 應用所需要的性能特性,并能非常容易地應用于各種不斷出現的場景。也就是說,Chakra 需要能夠快速啟動和運行,提供卓越的用戶體驗,并充分發揮底層硬件的潛能。

除 Microsoft Edge 瀏覽器之外,Chakra 還應用于通用 Windows 應用、 Azure DocumentDB 、 Cortana 、 Outlook.com 及 TypeScript (做過專門優化)。微軟還使 Node.js 可以使用 Windows 10 上的 Chakra ,從而使開發人員可以在新 IoT 平臺 Windows 10 IoT Core 上使用 Node.js。

carakan

2019 年由 Opera Software ASA 開發的 JavaScript 引擎,包含在 Opera 網絡瀏覽器的 V10.50 版本中,直到隨著 Opera 15(2013 年發布)切換到 V8。

本文總結

本文主要和大家介紹全網最火的 10+ JavaScript引擎,一部分是拿來即用的開源JavaScript引擎、另一部分是瀏覽器本身內置的JavaScript引擎,同時對每一個引擎的特點、使用場景做了一個簡單的介紹。

因為篇幅有限,文章并沒有過多展開,如果有興趣,可以在我的主頁繼續閱讀,同時文末的參考資料提供了大量優秀文檔以供學習。最后,歡迎大家點贊、評論、轉發、收藏!

參考資料

https://github.com/jerryscript-project/jerryscript

https://github.com/bellard/quickjs

https://github.com/svaarala/duktape

https://github.com/espruino/Espruino

https://github.com/cesanta/v7

https://github.com/cesanta/mjs

https://github.com/justjake/quickjs-emscripten

https://github.com/v8/v8

https://github.com/mozilla-spidermonkey

https://zhuanlan.zhihu.com/p/55479666?utm_id=0

https://www.infoq.cn/article/2015/12/javascript-chakra

https://github.com/gfwilliams/tiny-js

https://wohugb.gitbooks.io/javascript/content/bom/engine.html

https://www.infoworld.com/article/2675942/opera-working-on-faster-javascript-engine.html

https://en.wikipedia.org/wiki/List_of_ECMAScript_engines

 

圖片版權:來自Mihir Verma的文章《Inside Javascript Engine》,文章鏈接:https://dev.to/mihirverma7781/inside-javascript-engine-373

分享到:
標簽:JavaScript
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定