最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
WebAssembly 的現(xiàn)在與未來(lái)

上篇文章《當(dāng)前 WebAssembly 的狀況》已經(jīng)了解了WebAssembly 工作原理以及為什么 WebAssembly 運(yùn)行的更快,接下來(lái)就讓我們談?wù)刉ebAssembly 的現(xiàn)在與未來(lái)。

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比萊山網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式萊山網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋萊山地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。

2017 年 2 月 28 日,四個(gè)主要的瀏覽器一致同意宣布 WebAssembly 的MVP 版本已經(jīng)完成,它是一個(gè)瀏覽器可以搭載的穩(wěn)定版本。

它提供了瀏覽器可以搭載的穩(wěn)定核,這個(gè)核并沒(méi)有包含 WebAssembly 組織所計(jì)劃的所有特征,而是提供了可以使 WebAssembly 穩(wěn)定運(yùn)行的基本版本。

這樣一來(lái)開(kāi)發(fā)者就可以使用 WebAssembly 代碼了。對(duì)于舊版本的瀏覽器,開(kāi)發(fā)者可以通過(guò) asm.js 來(lái)向下兼容代碼,asm.js 是 JavaScript 的一個(gè)子集,所有 JS 引擎都可以使用它。另外,通過(guò) Emscripten 工具,你可以把你的應(yīng)用編譯成 WebAssembly 或者 asm.js。

盡管是***個(gè)版本,WebAssembly 已經(jīng)能發(fā)揮出它的優(yōu)勢(shì)了,未來(lái)通過(guò)不斷地改善和融入新特征,WebAssembly 會(huì)變的更快。

一、提升瀏覽器中 WebAssembly 的性能

隨著各種瀏覽器都使自己的引擎支持 WebAssembly,速度提升就變成自然而然的了,目前各大瀏覽器廠商都在積極推動(dòng)這件事情。

二、JavaScript 和 WebAssembly 之間調(diào)用的中間函數(shù)

目前,在 JS 中調(diào)用 WebAssembly 的速度比本應(yīng)達(dá)到的速度要慢。這是因?yàn)橹虚g需要做一次“蹦床運(yùn)動(dòng)”。JIT 沒(méi)有辦法直接處理 WebAssembly,所以 JIT 要先把 WebAssembly 函數(shù)發(fā)送到懂它的地方。這一過(guò)程是引擎中比較慢的地方。

按理來(lái)講,如果 JIT 知道如何直接處理 WebAssembly 函數(shù),那么速度會(huì)有百倍的提升。

如果你傳遞的是單一任務(wù)給 WebAssembly 模塊,那么不用擔(dān)心這個(gè)開(kāi)銷,因?yàn)橹挥幸淮无D(zhuǎn)換,也會(huì)比較快。但是如果是頻繁地從 WebAssembly 和 JavaScript 之間切換,那么這個(gè)開(kāi)銷就必須要考慮了。

三、快速加載

JIT 必須要在快速加載和快速執(zhí)行之間做權(quán)衡。如果在編譯和優(yōu)化階段花了大量的時(shí)間,那么執(zhí)行的必然會(huì)很快,但是啟動(dòng)會(huì)比較慢。目前有大量的工作正在研究,如何使預(yù)編譯時(shí)間和程序真正執(zhí)行時(shí)間兩者平衡。

WebAssembly 不需要對(duì)變量類型做優(yōu)化假設(shè),所以引擎也不關(guān)心在運(yùn)行時(shí)的變量類型。這就給效率的提升提供了更多的可能性,比如可以使編譯和執(zhí)行這兩個(gè)過(guò)程并行。

加之***增加的 JavaScript API 允許 WebAssembly 的流編譯,這就使得在字節(jié)流還在下載的時(shí)候就啟動(dòng)編譯。

FireFox 目前正在開(kāi)發(fā)兩個(gè)編譯器系統(tǒng)。一個(gè)編譯器先啟動(dòng),對(duì)代碼進(jìn)行部分優(yōu)化。在代碼已經(jīng)開(kāi)始運(yùn)行時(shí),第二個(gè)編譯器會(huì)在后臺(tái)對(duì)代碼進(jìn)行全優(yōu)化,當(dāng)全優(yōu)化過(guò)程完畢,就會(huì)將代碼替換成全優(yōu)化版本繼續(xù)執(zhí)行。

四、添加后續(xù)特性到 WebAssembly 標(biāo)準(zhǔn)的過(guò)程

WebAssembly 的發(fā)展是采用小步迭代的方式,邊測(cè)試邊開(kāi)發(fā),而不是預(yù)先設(shè)計(jì)好一切。

這就意味著有很多功能還在襁褓之中,沒(méi)有經(jīng)過(guò)徹底思考以及實(shí)際驗(yàn)證。它們想要寫(xiě)進(jìn)標(biāo)準(zhǔn),還要通過(guò)所有的瀏覽器廠商的積極參與。

這些特性叫做:未來(lái)特性。這里列出幾個(gè)。

1. 直接操作 DOM

目前 WebAssembly 沒(méi)有任何方法可以與 DOM 直接交互。就是說(shuō)你還不能通過(guò)比如element.innerHTML 的方法來(lái)更新節(jié)點(diǎn)。

想要操作 DOM,必須要通過(guò) JS。那么你就要在 WebAssembly 中調(diào)用 JavaScript 函數(shù)(WebAssembly 模塊中,既可以引入 WebAssembly 函數(shù),也可以引入 JavaScript 函數(shù))。

不管怎么樣,都要通過(guò) JS 來(lái)實(shí)現(xiàn),這比直接訪問(wèn) DOM 要慢得多,所以這是未來(lái)一定要解決的一個(gè)問(wèn)題。

2. 共享內(nèi)存的并發(fā)性

提升代碼執(zhí)行速度的一個(gè)方法是使代碼并行運(yùn)行,不過(guò)有時(shí)也會(huì)適得其反,因?yàn)椴煌木€程在同步的時(shí)候可能會(huì)花費(fèi)更多的時(shí)間。

這時(shí)如果能夠使不同的線程共享內(nèi)存,那就能降低這種開(kāi)銷。實(shí)現(xiàn)這一功能 WebAssembly 將會(huì)使用 JavaScript 中的 SharedArrayBuffer,而這一功能的實(shí)現(xiàn)將會(huì)提高程序執(zhí)行的效率。

3. SIMD(單指令,多數(shù)據(jù))

如果你之前了解過(guò) WebAssembly 相關(guān)的內(nèi)容,你可能會(huì)聽(tīng)說(shuō)過(guò) SIMD,全稱是:Single Instruction, Multiple Data(單指令,多數(shù)據(jù)),這是并行化的另一種方法。

SIMD 在處理存放大量數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)有其獨(dú)特的優(yōu)勢(shì)。比如存放了很多不同數(shù)據(jù)的 vector(容器),就可以用同一個(gè)指令同時(shí)對(duì)容器的不同部分做處理。這種方法會(huì)大幅提高復(fù)雜計(jì)算的效率,比如游戲或者 VR。

這對(duì)于普通 web 應(yīng)用開(kāi)發(fā)者不是很重要,但是對(duì)于多媒體、游戲開(kāi)發(fā)者非常關(guān)鍵。

4. 異常處理

許多語(yǔ)言都仿照 C++ 式的異常處理,但是 WebAssembly 并沒(méi)有包含異常處理。

如果你用 Emscripten 編譯代碼,就知道它會(huì)模擬異常處理,但是這一過(guò)程非常之慢,慢到你都想用“DISABLEEXCEPTIONCATCHING” 標(biāo)記把異常處理關(guān)掉。

如果異常處理加入到了 WebAssembly,那就不用采用模擬的方式了。而異常處理對(duì)于開(kāi)發(fā)者來(lái)講又特別重要,所以這也是未來(lái)的一大功能點(diǎn)。

5. 其他改進(jìn)——使開(kāi)發(fā)者開(kāi)發(fā)起來(lái)更簡(jiǎn)單

一些未來(lái)特性不是針對(duì)性能的,而是使開(kāi)發(fā)者開(kāi)發(fā) WebAssembly 更方便。

***的開(kāi)發(fā)者工具。目前在瀏覽器中調(diào)試 WebAssembly 就像調(diào)試匯編一樣,很少的開(kāi)發(fā)者可以手動(dòng)地把自己的源代碼和匯編代碼對(duì)應(yīng)起來(lái)。我們?cè)谥铝τ陂_(kāi)發(fā)出更加適合開(kāi)發(fā)者調(diào)試源代碼的工具。

垃圾回收。如果你能提前確定變量類型,那就可以把你的代碼變成 WebAssembly,例如 TypeScript 代碼就可以編譯成 WebAssembly。但是現(xiàn)在的問(wèn)題是 WebAssembly 沒(méi)辦法處理垃圾回收的問(wèn)題,WebAssembly 中的內(nèi)存操作都是手動(dòng)的。所以 WebAssembly 會(huì)考慮提供方便的 GC 功能,以方便開(kāi)發(fā)者使用。

ES6 模塊集成。目前瀏覽器在逐漸支持用 script 標(biāo)記來(lái)加載 JavaScript 模塊。一旦這一功能被***執(zhí)行,那么像