谷歌、微軟聯手 Mozilla 等瀏覽器廠商推出新二進制格式 WebAssembly
谷歌、微軟、Mozilla 和 WebKit 項目 工程師今天宣布,他們已經聯手推出了 WebAssembly ,這是一個用于編譯網頁應用的新 二進制格式 。
Web 依靠其標準取得了很大的進展,且無論好壞與否,JavaScript 都是它的編程語言。但在過去幾年,我們看到越來越多的項目問世,它們試圖通過開發編譯程序,將其他語言代碼轉化為 JavaScript,以此讓開發者克服 JavaScript 自身存在的一些短板。其中一些項目專注于給編程語言增加新的功能,比如微軟的 TypeScript,或是加快 JavaScript 的發展速度,例如 Mozilla 的 asm.js 項目。如今,眾多此類項目開始聯合起來,以 WebAssmbly 的形式出現在大家面前。
這種新的格式旨在讓編程人員為瀏覽器編譯代碼(目前瀏覽器的專注點是 C/C++,其他語言的重要性次之),然后在 JavaScript 引擎內進行執行。由于不必解析完整的代碼——這種操作往往會耗費相當長的一段時間(尤其是在移動端),因此 WebAssmbly 被解碼的速度可以大大加快。
WebAssmbly 團隊的想法是,這種新的二進制格式將向開發者提供單一的 Web 編譯目標,最終成為一種可在所有瀏覽器中執行的 Web 標準。
在默認環境下,JavaScript 文檔其實就是簡單的文本文件,先是從服務器下載,然后由瀏覽器中的 JavaScript 引擎解析并編譯。WebAssmbly 團隊之所以決定推出新的二進制格式,原因有兩個,一是代碼可以被壓縮為其他的文本文件,而不僅限于標準的 JavaScript 文本文件,二是相比解析 asm.js 代碼,JavaScript 引擎破譯二進制格式的速度要快得多——在當前的原型標準下,最多快了 23 倍。
長期以來,Mozilla asm.js 旨在將接近于本地的速度帶給 Web。而旨在在瀏覽器中運行本地代碼的谷歌 Native Client 項目 ,也具有類似的目標,只是影響力相對較小。看起來,WebAssmbly 如今可以將這些項目中最好的元素融入瀏覽器。
作為第一步,WebAssmbly 團隊的目標是提供與 asm.js 相同的功能性,開發者將可以在 WebAssmbly 上面使用相同的 Emscripten 工具,就像他們今天使用這種工具編譯 asm.js 代碼一樣。
在早期階段,WebAssmbly 團隊還計劃推出一個所謂的 polyfill 庫 ,用以將 WebAssmbly 代碼轉化為 JavaScript,這樣就能運行于任意瀏覽器上——甚至是沒有獲得本地 WebAssmbly 支持的瀏覽器上(很顯然,這有點荒謬,但如果瀏覽器可以在本地運行這種代碼,那么最后一步就不需要了)。隨著時間的推移,WebAssmbly 團隊還將開發更多的工具(比如編譯程序和調試程序等),同時支持更多的語言(例如 Rust、Go 和 C#)。
正如“JavaScript 之父” 布蘭登·艾奇 (BrendanEich)在今天所指出的,一旦主要的瀏覽器全都能在本地支持新的二進制格式,那么 WebAssmbly 和 JavaScript 就可以再次分離。艾奇曾擔任過 Mozilla 首席執行官,但在任職 10 天后即被迫辭職。
WebAssmbly 團隊還指出,他們推出 WebAssmbly 不是為了取代 JavaScript,而是為了讓更多的語言可以支持 Web 編譯。實際上,JavaScript 和 WebAssembly 很有可能會被開發者同時使用,例如,某款應用的部分元素可能會使用 WebAssembly 模塊(如動畫、可視化和壓縮等),而用戶界面仍然可以主要使用 JavaScript 語言編寫。
我們很少看到所有主要的瀏覽器廠商攜手推出像 WebAssembly 這樣的項目,所以,他們的合作會帶來什么樣的成果,肯定值得我們在未來幾個月乃至幾年保持關注。
題圖來源: 邁克爾·希姆比奧特(MICHAEL HIMBEAULT)/FLICKR ,根據 CC BY 2.0 協議授權
翻譯:皓岳
Google, Microsoft,Mozilla And Others Team Up To Launch WebAssembly, A New Binary Format For The Web