各瀏覽器廠商在WebAssembly相關(guān)的工作上已經(jīng)達(dá)成了一種“共識(shí)”,這使得各瀏覽器開(kāi)始默認(rèn)支持WebAssembly格式。
早在2016年11月,WebAssembly就已經(jīng)進(jìn)入“瀏覽器預(yù)覽”(Browser Preview)階段。在此階段,主流瀏覽器都提供了一個(gè)具有WebAssembly開(kāi)關(guān)標(biāo)識(shí)的測(cè)試版本瀏覽器。隨后的數(shù)月時(shí)間,各瀏覽器廠商需要在JavaScript API和二進(jìn)制格式上做改進(jìn),并就此取得一致意見(jiàn)。近期發(fā)布的公告對(duì)WebAssembly做了界定:
如果沒(méi)有實(shí)現(xiàn)經(jīng)驗(yàn)和明確用途,那么無(wú)法對(duì)WebAssembly API和二進(jìn)制格式的設(shè)計(jì)做進(jìn)一步的改進(jìn)。從這個(gè)意義上講,最初的設(shè)計(jì)工作已經(jīng)完成。(各瀏覽器廠商)就此已達(dá)成了共識(shí)。
這一共識(shí)標(biāo)志著“瀏覽器預(yù)覽”階段的結(jié)束,意味著各個(gè)瀏覽器可以默認(rèn)打開(kāi)對(duì)WebAssembly格式的支持。由此往后,將來(lái)的特性設(shè)計(jì)會(huì)確保向后兼容。
雖然這一最初實(shí)現(xiàn)是一個(gè)重要的里程碑,但是并不會(huì)立刻被開(kāi)發(fā)人員大范圍地采用。盡管未來(lái)潛力無(wú)限,WebAssembly當(dāng)前的語(yǔ)言支持僅限于C和C++,以及對(duì)Rust的初期支持。WebAssembly也沒(méi)有提供垃圾回收機(jī)制,因此C#和Java這樣的語(yǔ)言并不能正常運(yùn)行,除非將它們自身的運(yùn)行時(shí)作為二進(jìn)制的組成部分。但是以后添加垃圾回收已在討論中。
此外,WebAssembly當(dāng)前缺少與DOM交互等重要特性。Mozilla工程師Lin Clark 寫(xiě)道,雖然“期待了很多的特性”,但是這些特性需要“有一個(gè)制定規(guī)范的過(guò)程”。WebAssembly社區(qū)組已經(jīng)提供了一個(gè)供W3C工作組討論的未來(lái)特性列表,但是這些特性何時(shí)可用尚未有時(shí)間表。
Clark在一系列的帖子說(shuō)明了WebAssembly會(huì)改進(jìn)性能的原因所在,并指出引入WebAssembly將會(huì)是一個(gè)“轉(zhuǎn)折點(diǎn)”,可導(dǎo)致無(wú)法預(yù)料的性能改進(jìn),并提供迎接新挑戰(zhàn)的能力。
今后幾年,各瀏覽器廠商會(huì)在改進(jìn)JIT編譯器性能的同時(shí),繼續(xù)改進(jìn)JavaScrip和WebAssembly間的交互。
現(xiàn)在已可用的Firefox 52支持WebAssembly格式。定于2017年3月14日發(fā)布的Chrome 57也將默認(rèn)啟用WebAssembly格式。
查看英文原文: Browser Vendors Start Shipping WebAssembly by Default