WebAssembly 技術
WebAssembly 有一套完整的語義,實際上wasm是體積小且加載快的二進制格式,其目標就是充分發揮硬件能力以達到原生執行效率。
WebAssembly 是一種可以使用非JavaScript編程語言編寫代碼并且能在瀏覽器上運行的技術方案,實際上,是一種新的字節碼格式(當然還有很多優點)。
Web第四種語言
2019年12月5日,WebAssembly正式稱為World Wide Web Consortium(W3C)的標準,加入到了HTML、CSS和JavaScript的行列。
(控制臺可以輸出:WebAssembly)
工作原理:
-
WebAssembly 是除了JavaScript以外,另一種可以再網頁中運行的編程語言。過去如果你想在瀏覽器中運行代碼來對網頁中各種元素進行控制,只有JavaScript這一種選擇。
-
WebAssembly 與其他的匯編語言不一樣,它不依賴于具體的物理機器。可以抽象的理解成它是概念機器的機器語言。
WebAssembly 的優勢
- 文件加載:WebAssembly 文件體積更小,所以下載速度更快
- 解析:解碼 WebAssembly 比解析 JavaScript 要快
- 編譯和優化:編譯和優化所需的時間少,因為在將文件推送到服務器之前已經進行了更多優化,JavaScript 需要為動態類型多次編譯代碼
- 重新優化:WebAssembly 代碼不需要重新優化,因為編譯器有足夠的信息可以在第一次運行時獲得正確的代碼
- 執行:執行可以更快,WebAssembly 指令更接近機器碼
- 垃圾回收:目前 WebAssembly 不直接支持垃圾回收,垃圾回收都是手動控制的,所以比自動垃圾回收效率更高
- 安全:可以放hash和簽名等等
WebAssembly 的應用
WebAssembly 可用于視頻和音頻編解碼器,圖形和3D,多媒體和游戲,密碼計算或便攜式語言實現等領域。
代碼演示,初步認識
fetch('./test.wasm').then(response => {
response.arrayBuffer()
}).then(bytes => {
WebAssembly.complie(bytes)
}).then(mod => {
const instance = new WebAssembly.Instance(mod)
const a = instance.exports
console.log(a)
console.time('測試 fib 速度:')
var re = a.fib(40)
console.timeEnd('測試 fib 速度:')
})
init fib(int x) {
if (x <= 0) return 0
if (x <= 2) return 1
return fib(x-1) + fix(x-2)
}

WebAssembly Exporter 在線工具或者下載本地工具,將C++編譯成wasm
浙公網安備 33010602011771號