原文: https://tomassetti.me/introduction-to-webassembly/
WebAssembly簡介:我們為什麼要關心這個技術?
在對抗js的偉大戰鬥中有一個新的武器,允許開發者們在提高效能和生產力同時選擇他們喜歡的程式設計風格。這個武器就是WebAssembly,它將會掀起web開發中客戶端的革命
WebAssembly,或者叫wasm,是用於瀏覽器端的底層位元組碼格式指令碼。如果你為一個程式語言開發了一個編譯器,其中一個選項是編譯到一個目標平臺,像jvm 或者.net編譯你的語言到指定位元組碼,webAssembly使用同樣的規則,當被編譯成webassembly,可以在任何平臺執行你的軟體,換句話說,執行在所有瀏覽器中。
在實用性方面,webassembly是由瀏覽器中的js引擎開發者開發,本質上,在web領域中,它被設計成替代javascript,作為編譯器的目標和翻譯結果。例如,替代typescript編譯成javascript,開發者可以編譯成webassembly,簡而言之,這不是一個新的虛擬機器器,對於javascript虛擬機器它是一個新的格式,可以被所有瀏覽器引入的格式,這樣就可以利用現有的javascript資源,而不是用javascript
基本的可行性設計,已經在2017年3月設計完成,下面連結是主流瀏覽器支援情況
https://caniuse.com/#feat=wasm
為什麼重要?
首先,webassembly格式保證在解析效能上有重大提高
webassembly這種二進位制格式認為作為本地解析比javascript更快,在移動端,大量的編譯程式碼僅僅是用來解析輕易地花掉20-40秒,所以本地解析對於提供一個好的冷負荷使用者體驗至關重要
注意,我們談論的是解析效能,不是執行能行,因為許多情況下它將執行在現有的js引擎上,然而,單在解析效能上的提高將允許我們將以前無法實現的開發放在web軟體上,例如,虛擬機器,虛擬現實,影象識別
第一個產品使用者可能是遊戲引擎開發者,因為他們總是尋找最棒的效能,webassembly以前,他們最好選擇是asm.js,一個很苦的技術,但是不太適用大多數遊戲,我記得我試過罪名的demo Epic Citadel (已經下線) 它是使用UE引擎,實際上執行很平滑,但是下載和解析程式碼就要15分鐘,對於需要快速的遊戲來說它不夠好
事實上,autodesk計劃為他們的stingray遊戲引擎提供支援webassembly支援,unity引擎創始人也在嘗試webassembly,Rust開發者已經通過webassembly支援,在web上執行rust程式碼
他能為你做什麼?
在更廣泛的藍圖中,隨著webassembly的到來,意味著在web領域,你不需要在被強制使用javascript,因為它僅僅只能跑在瀏覽器中,JavaScript名聲不好,實際上它是一個很好的語言,可以快速編寫小的指令碼,問題是你被強制使用,用於所有你需要在web上執行的東西,許多大專案來說這就是一個問題
你可以使用更好版本的javascript,例如typescript,甚至新語言例如Kotlin,但是最後,他們不得不編譯成javascript, 反過來,這也給JavaScript開發人員帶來了問題,必須支援所有場景和所有程式設計風格,webassembly將改變這個,讓每個人都集中精力做他們能做得更好的事情
這還不是全部,開放webassembly給所有其他平臺,意味著如果你使用一種語言編寫軟體,編譯成webassembly,你可以在.net平臺上執行。實際上這將允許重複使用已有的javasxript資源,意味著你可以在產品中使用這些資源
然而這不是唯一可能,你可以創造自己的實現,根據你的需要,你可以為你的語言創造一個效能更好的編譯器,你可以從頭建立或者新增webassembly支援到一個現有的編譯器,這樣做你可以利用其他webassembly模組。
例如,你可以為dsl創造一個webassembly編譯器,這種dsl語言在你的公司內部使用,讓它執行在web客戶端上,不需要自定義類似oracle java plug-in或者adobe flash外掛