除了HTML、CSS與JS 現在WASM也是標準Web語言
大家應該知道,萬維網聯盟 W3C 認證的Web 語言有HTML、CSS 與JavaScript,而近日聯盟正式宣布WebAssembly 核心規範(WebAssembly Core Specification)成為官方Web 標準,這意味著WebAssembly 成為了第4 種Web 語言。
WebAssembly 也叫WASM,它是為基於棧的虛擬機設計的二進制指令格式,WASM 作為可移植目標,用於編譯高級語言(如C/C++/Rust),從而可以在Web 上部署高性能客戶端和服務器應用,同時它也可以在許多其它環境中使用。
WebAssembly 描述了一種內存安全的沙箱執行環境,該環境甚至可以在現有JavaScript 虛擬機內部實現。當嵌入到Web 中時,WebAssembly 將強制執行瀏覽器的同源和權限安全策略。
WASM 有多種實現,包括瀏覽器和獨立系統,它可以用於視頻和音頻編解碼器、圖形和3D、多媒體和遊戲、密碼計算或便攜式語言實現等應用。
目前1.0 版本的Wasm 已經支持Chrome、Firefox、Safari 與Edge 瀏覽器。
對於Web 來說,因為其虛擬指令集設計,WebAssembly 可讓加載的頁面以本地編譯代碼運行,從而可以提高Web 性能。
換句話說,WebAssembly 可以實現接近本地的性能,並且優化加載時間,同時最重要的是,它可以作為現有代碼庫的編譯目標。
儘管本地類型數量很少,但相對於JavaScript 而言,性能的提高大部分歸功於其對一致類型的使用。WebAssembly 對編譯語言進行了數十年的優化,其字節代碼針對緊湊性和流傳輸進行了優化。在下載其它代碼時,網頁便可以開始執行。網絡和API 訪問通過附帶的JavaScript 庫進行,安全模型則與JavaScript 相同。
W3C 同時公佈了WASM 接下來的開發重點,新特性包括:
Threading,線程
Threading 提供了共享內存多線程和原子內存訪問的優勢。
Fixed-width SIMD,固定寬度SIMD
並行執行循環的向量操作。
Reference types 引用類型
允許WebAssembly 代碼直接引用宿主對象。
Tail calls,尾調用
直接調用而不使用額外的堆棧空間。
ECMAScript module integration,ECMAScript 模塊集成
通過將WebAssembly 可執行文件加載為ES6 模塊來與JavaScript 進行交互。
此外還有一些一直在跟進的特性,包括垃圾回收、調試接口與WebAssembly 系統接口(WASI)等。
值得一提的是,上個月Mozilla、Fastly、Intel與Red Hat宣布成立聯合組織Bytecode Alliance(字節碼聯盟),該聯盟旨在通過協作實施標準和提出新標準,以完善WebAssembly在瀏覽器之外的生態。