必威电竞|足球世界杯竞猜平台

asm.js
來源:互聯網

asm.js 是一種ECMAScript 的嚴格子集,旨在允許使用C 等編程語言編寫的計算機軟件作為網絡應用程序運行,同時保持比標準JavaScript 更高的性能。

設計原理

asm.js 是JavaScript 的一個嚴格子集,包含手動內存管理和靜態類型的代碼,這些代碼可以通過源代碼至源代碼編譯器(如基于LLVM 的Emscripten)轉換為JavaScript。asm.js 的設計使得其性能能夠接近本地代碼,且能夠在所有主流網頁瀏覽器上運行。

代碼生成

asm.js 不是直接編寫的,而是通過編譯器生成的一種中間語言。例如,對于一段C 語言代碼,Emscripten 將輸出相應的ECMAScript 代碼。在生成的代碼中,變量MEM8 表示一個類型緩沖區的逐字節“視圖”,充當asm.js 代碼的堆。

性能表現

asm.js 的性能依賴于瀏覽器和硬件。編譯為asm.js 的C 程序的基準測試通常比使用clang 的本地編譯慢一倍以上。然而,Mozilla Application Suite 的基準測試顯示,使用float32 優化的Firefox 可以運行所有基準,僅比原生速度慢不到1.5 倍。

實現情況

Emscripten 提供了將C 和C++ 等語言編譯為asm.js 的工具。asm.js 支持ECMAScript 6,因此所有支持該規范的新版瀏覽器都可以運行asm.js 代碼。一些瀏覽器實現了針對asm.js 的特殊優化,如Mozilla Firefox 自Firefox 22 開始使用OdinMonkey 進行優化,而Microsoft Edge 使用Chakra 引擎實現asm.js 支持。

廣泛采用

asm.js 已經被廣泛應用于各種編程語言、應用程序框架、程序、庫、游戲引擎和游戲等方面。其中包括C/C++、Lua VM、PerlPythonRuby 等編程語言,以及pepper.js、Qt 等應用程序框架。此外,還有OpenGL、SDL、SDL2、Vim、FreeType、SQLite、GNU Privacy Guard、ctags、gnuplot、Graphviz、zlib 等程序和庫,以及虛幻引擎3、Unreal Engine 4、Unity、ScummVM、Godot 等游戲引擎,以及毀滅戰士SuperTux、Dune II、BananaBread 等游戲。

技術發展

隨著WebAssembly 的出現,asm.js 大多已經過時。WebAssembly 具有更快的解析速度,而asm.js 主要作為WebAssembly 的備用方案。WebAssembly 組織提供的程序可以將WebAssembly 轉換為asm.js,但不存在專門的asm.js 到WebAssembly 的轉換器。

參考資料 >

為什么現如今asm.js鮮有耳聞?.blog.2024-11-15

歷史篇:為什么會有 WebAssembly 這樣一門技術?.blog.2024-11-15

Asm.js的簡單介紹.Asm.js的簡單介紹.2024-11-15

生活家百科家居網