來談談WebAssembly是個啥?爲何說它會影響每一個Web開發者?

原文:What is WebAssembly and why it affects web developers!

你聽說過WebAssembly嗎?這是由Google, Microsoft, MozillaApple等幾家大公司合作發起的一個關於面向Web的通用二進制和文本格式的項目。
現在就讓我們來看看WebAssembly到底是個啥?爲什麼它的出現和未來的發展跟我們每個人都息息相關,即使你並不是一個程序猿/媛~

至少在某種程度上,它將改變Web生態。

helloworld

JavaScript–Web世界的彙編語言

我們有許多面向Web應用的開發規範,這些設計優良的規範讓Web開發者們的工作變得更加的簡單。我們很難想象自己所創建和網站或應用沒有任何規則、編程語言、框架和開發理念可以遵循。

而將所有這些事情組合到一起的Web規範有一個衆所周知的名字:JavaScript

JavaScript基本上已經成爲了Web平臺的標準開發語言。而隨着越來越多的軟件成爲了Web應用,JavaScript更是獲得了極大的發展。

但在過去幾年,我們看到越來越多的項目問世,它們試圖通過開發編譯程序,將其他語言代碼轉化爲 JavaScript,以此讓開發者克服 JavaScript 自身存在的一些短板。其中一些項目專注於給編程語言增加新的功能,比如微軟的 TypeScript和Google的Dart,或是加快 JavaScript 的執行速度,例如 Mozilla 的 asm.js 項目和Google的PNaCI

在默認環境下,JavaScript 文檔其實就是簡單的文本文件,先是從服務器下載,然後由瀏覽器中的 JavaScript 引擎解析並編譯。用戶可以通過Ajax技術在瀏覽網頁時與服務器進行通信。

這裏寫圖片描述

在瀏覽器端目前是使用JavaScript來實現與用戶進行動態交互等功能,雖然很多JavaScript框架都致力於性能優化,但是一套基於字節碼的系統仍然會有更快更好的性能表現。

所以,WebAssembly到底是個什麼鬼?

WebAssembly是一種新的字節碼格式。它的縮寫是”.wasm”,.wasm 爲文件名後綴,是一種新的底層安全的二進制語法。。它被定義爲“精簡、加載時間短的格式和執行模型”,並且被設計爲Web 多編程語言目標文件格式。
這意味着瀏覽器端的性能會得到極大提升,它也使得我們能夠實現一個底層構建模塊的集合,例如,強類型和塊級作用域。(原文:And it gives us access to a set of low level building blocks, such as a range of types and operations.這句話我實在不知如何翻譯。。。)
不過別搞錯了,這並不意味着WebAssmbly是爲了取代 JavaScript而生喲~
就像Bjarne Stroustup說的:“JS會活得很好,因爲世界上只有兩種類型的語言:一類語言被人們不斷的地吐槽,而另一類語言壓根兒沒人用!”而Eric Elliott認爲:“最好不要把WebAssembly僅僅當做一門編程語言,實際上它更像是一個編譯器。”

從asm.js到WebAssembly?

asm.js是一個JavaScript的一個嚴格的子集,可以被用來作爲一個底層的、高效的編譯器目標語言。asm.js提供了一個類似於C/C++虛擬機的抽象實現,包括一個可有效負載和存儲的大型二進制堆、整型和浮點運算、高階函數定義、函數指針等。

asm.js的思想是使用它所規定的方法來編寫JavaScript代碼,支持asm.js的引擎會將代碼轉變爲十分高效的機器碼。如果你是將C++代碼編譯爲asm.js,將在瀏覽器端獲得極大的性能提升。
webassembly-asm-javascript
webassembly相較於asm.js的優勢主要是涉及到性能方面。根據WebAssembly FAQ的描述:在移動設備上,對於很大的代碼庫,asm.js僅僅解析就需要花費20-40秒,而實驗顯示WebAssembly的加載速度比asm.js快了20倍,這主要是因爲相比解析 asm.js 代碼,JavaScript 引擎破譯二進制格式的速度要快得多。

這玩意兒到底好在哪?

你很可能會問:“爲啥所有人都在談論WebAssembly?”這是因爲WebAssembly對於JS來說絕對是一個巨大的改進,但我們常常會問自己:“這樣,就夠了嗎?”當然不是,WebAssembly對於瀏覽器來說也有着非同一般的意義。
支持WebAssembly的瀏覽器可以識別二進制格式的文本,它有能力編譯比JS文本小得多的二進制包。
這將給web應用帶來類似與本地應用的性能體驗!這四不四聽起來很棒啊?!如果瀏覽器不得不解析完整的JS代碼,這將會耗去好多時間(特別是在移動平臺上),而瀏覽器對WebAssembly格式的解碼速度顯然要快得多得多得多:)
下面獻上JS作者BE大神的演講視頻地址(油管,需翻牆):Brendan Eich on JavaScript Taking Both the High and Low Roads - O’Reilly Fluent 2014

都有誰入了WebAssembly的坑?

包括Google, Microsoft,Mozilla只是這一長串名單中的少數幾家公司。項目帶頭人們發起了WebAssembly Community Group這一社區,這個團隊的願景是“在一種新的,輕量的web編碼格式的基礎上,促進瀏覽器廠商們的合作.”
不過,WebAssembly項目還只是剛剛啓動,雖然它有一個美妙的開頭,但在WebAssembly成爲一個大衆認可的web標準之前,它還有很長的路要走。

爲啥這玩意會影響每一個web開發者

因爲webassembly讓開發者有能力選擇之前那些不能用來開發web應用的語言來進行web開發,或者他們也可以繼續使用簡單易用的JavaScript!
W3C WebAssembly Community group給出了一些WebAssembly的用例,它們展示了WebAssembly如何使得web開發者更加輕鬆的工作:

  • 一些執行效率更高的語言可以被編譯成在Web平臺上執行的代碼。

  • 提供了在瀏覽器端的開發者工具

  • 更加快捷的企業級應用客戶端(例如:數據庫)

WebAssembly的用途很多。舉幾個栗子:WebAssembly可以被嵌入到已經開發好的JavaScript/HTML代碼中;或者某款應用的主要框架可以使用 WebAssembly 模塊(如動畫、可視化和壓縮等),而用戶界面仍然可以主要使用 JavaScript/HTML語言編寫。

精簡的代碼,更好的性能,更少的bug?

據WebAssembly的開發團隊描述,使用WebAssembly意味着更少的原代碼。與asm.js相比,它減少了大約25%的代碼量。雖然這僅僅是一個原型。
現在你可能很想知道如何獲取關於WebAssembly的最新進展,下面這些資源將會對你很有幫助:

發佈了32 篇原創文章 · 獲贊 51 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章