溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JavaScript中WebAssembly是什么

發(fā)布時間:2021-06-26 10:00:06 來源:億速云 閱讀:234 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關(guān)JavaScript中WebAssembly是什么的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

JavaScript 的 WebAssembly

本周發(fā)布的 Firefox 52 加入了對 WebAssembly 的支持,成為第一個支持 WebAssembly 標(biāo)準(zhǔn)的瀏覽器,而其它瀏覽器如 Chrome 57、Safari 和 Edge 也都會陸續(xù)支持 WebAssembly。WebAssembly 源于Mozilla 發(fā)起的 Asm.js 項目,設(shè)計補充而非取代 JavaScript,它是一個二進(jìn)制格式,容易翻譯到原生代碼,本地解碼速度比 JS 解析快得多,讓高性能的 Web 應(yīng)用在瀏覽器上運行成為可能,比如視頻游戲、計算機輔助設(shè)計、視頻和圖像編輯、科學(xué)可視化等等。

未來,現(xiàn)有的生產(chǎn)力應(yīng)用和 JavaScript 框架都有可能使用 WebAssembly,能顯著降低加載速度,同時改進(jìn)運行性能。開發(fā)者可以將針對 CPU 密集計算的 WebAssembly 庫整合到現(xiàn)有的 Web 應(yīng)用中。

你聽說過 WebAssembly 嗎?這是由 Google , Microsoft , Mozilla , Apple 等幾家大公司合作發(fā)起的一個關(guān)于 面向Web的通用二進(jìn)制和文本格式 的項目。 現(xiàn)在就讓我們來看看WebAssembly到底是個啥?為什么它的出現(xiàn)和未來的發(fā)展跟我們每個人都息息相關(guān),即使你并不是一個程序猿/媛~

至少在某種程度上,它將改變Web生態(tài)。

JavaScript–Web世界的匯編語言

我們有許多面向Web應(yīng)用的開發(fā)規(guī)范,這些設(shè)計優(yōu)良的規(guī)范讓W(xué)eb開發(fā)者們的工作變得更加的簡單。我們很難想象自己所創(chuàng)建和網(wǎng)站或應(yīng)用沒有任何規(guī)則、編程語言、框架和開發(fā)理念可以遵循。

而將所有這些事情組合到一起的Web規(guī)范有一個眾所周知的名字: JavaScript !

JavaScript基本上已經(jīng)成為了Web平臺的標(biāo)準(zhǔn)開發(fā)語言。而隨著越來越多的軟件成為了Web應(yīng)用,JavaScript更是獲得了極大的發(fā)展。

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

在默認(rèn)環(huán)境下,JavaScript文檔其實就是簡單的文本文件,先是從服務(wù)器下載,然后由瀏覽器中的 JavaScript引擎解析并編譯。用戶可以通過Ajax技術(shù)在瀏覽網(wǎng)頁時與服務(wù)器進(jìn)行通信。

在瀏覽器端目前是使用JavaScript來實現(xiàn)與用戶進(jìn)行動態(tài)交互等功能,雖然很多JavaScript框架都致力于性能優(yōu)化,但是一套基于字節(jié)碼的系統(tǒng)仍然會有更快更好的性能表現(xiàn)。

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

WebAssembly是一種新的字節(jié)碼格式。它的縮寫是".wasm", .wasm 為文件名后綴,是一種新的底層安全的二進(jìn)制語法。。它被定義為“精簡、加載時間短的格式和執(zhí)行模型”,并且被設(shè)計為Web 多編程語言目標(biāo)文件格式。

這意味著瀏覽器端的性能會得到極大提升,它也使得我們能夠?qū)崿F(xiàn)一個底層構(gòu)建模塊的集合,例如,強類型和塊級作用域。(原文: 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 認(rèn)為:“最好不要把WebAssembly僅僅當(dāng)做一門編程語言,實際上它更像是一個編譯器。”

從asm.js到WebAssembly?

asm.js 是一個JavaScript的一個嚴(yán)格的子集,可以被用來作為一個底層的、高效的編譯器目標(biāo)語言。asm.js提供了一個類似于C/C++虛擬機的抽象實現(xiàn),包括一個可有效負(fù)載和存儲的大型二進(jìn)制堆、整型和浮點運算、高階函數(shù)定義、函數(shù)指針等。

asm.js的思想是使用它所規(guī)定的方法來編寫JavaScript代碼,支持asm.js的引擎會將代碼轉(zhuǎn)變?yōu)槭指咝У臋C器碼。如果你是將C++代碼編譯為asm.js,將在瀏覽器端獲得極大的性能提升。webassembly相較于asm.js的優(yōu)勢主要是涉及到性能方面。根據(jù) WebAssembly FAQ 的描述:在移動設(shè)備上,對于很大的代碼庫,asm.js僅僅解析就需要花費20-40秒,而 實驗 顯示W(wǎng)ebAssembly的加載速度比asm.js快了20倍,這主要是因為相比解析 asm.js 代碼,JavaScript引擎破譯二進(jìn)制格式的速度要快得多。

這玩意兒到底好在哪?

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

都有誰入了WebAssembly的坑?

包括Google, Microsoft,Mozilla只是這一長串名單中的少數(shù)幾家公司。項目帶頭人們發(fā)起了 WebAssembly Community Group 這一社區(qū),這個團隊的愿景是“在一種新的,輕量的web編碼格式的基礎(chǔ)上,促進(jìn)瀏覽器廠商們的合作.” 不過,WebAssembly項目還只是剛剛啟動,雖然它有一個美妙的開頭,但在WebAssembly成為一個大眾認(rèn)可的web標(biāo)準(zhǔn)之前,它還有很長的路要走。

為啥這玩意會影響每一個web開發(fā)者

因為webassembly讓開發(fā)者有能力選擇之前那些不能用來開發(fā)web應(yīng)用的語言來進(jìn)行web開發(fā),或者他們也可以繼續(xù)使用簡單易用的JavaScript! W3C WebAssembly Community group 給出了一些WebAssembly的用例,它們展示了WebAssembly如何使得web開發(fā)者更加輕松的工作:

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

  • 提供了在瀏覽器端的開發(fā)者工具

  • 更加快捷的企業(yè)級應(yīng)用客戶端(例如:數(shù)據(jù)庫)

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

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

據(jù)WebAssembly的開發(fā)團隊描述,使用WebAssembly意味著更少的原代碼。與asm.js相比,它減少了大約25%的代碼量。雖然這僅僅是一個原型。

感謝各位的閱讀!關(guān)于“JavaScript中WebAssembly是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI