在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>java源碼下載>

WebAssembly的起源及實踐分析

大小:0.9 MB 人氣: 2017-09-30 需要積分:2
在瀏覽器之爭中,Chrome憑借Java的卓越性能取得了市場主導(dǎo)地位,然而由于Java的無類型特性,導(dǎo)致其運行時消耗大量的性能做為代價,這也是Java的瓶頸之一。WebAssembly旨在解決這一問題。本文從WebAssembly的起源到開發(fā)實踐對其做全面探究,幫助開發(fā)者對WebAssembly有全面的了解。
  緣起
  讓我們從瀏覽器大戰(zhàn)說起。微軟憑借Windows系統(tǒng)捆綁Internet Explorer的先天優(yōu)勢擊潰Netscape后,進(jìn)入了長達(dá)數(shù)年的靜默期。而Netscape則于1998年將Communicator開源,并由Mozilla基金會衍生出Firefox瀏覽器,在2004年發(fā)布了1.0版本。從此,第二次瀏覽器大戰(zhàn)拉開帷幕。這場大戰(zhàn)由Firefox瀏覽器領(lǐng)銜,Safari、Opera等瀏覽器也積極進(jìn)取,Internet Explorer的主導(dǎo)地位首次受到挑戰(zhàn)。2008年Google推出Chrome瀏覽器,不但逐步侵蝕Firefox的市場,更是壓制了老邁的Internet Explorer。在此次大戰(zhàn)之后的2012年,StatCounter的數(shù)據(jù)指出Chrome以微弱優(yōu)勢超越Internet Explorer成為世界上最流行的瀏覽器。
  分析Google Chrome瀏覽器戰(zhàn)勝Internet Explorer的原因,除了對Web標(biāo)準(zhǔn)更友善的支持外,卓越的性能是其中相當(dāng)重要的因素,而瀏覽器性能之爭的本質(zhì)則體現(xiàn)在Java引擎。此前,Java引擎的實現(xiàn)方式經(jīng)歷了遍歷語法樹到字節(jié)碼解釋器等較為原始的方式,將每條源代碼翻譯成相應(yīng)的機器碼并執(zhí)行,并不保存翻譯后的機器碼,使得解釋執(zhí)行很慢。2008年9月,Google發(fā)布了V8 Java引擎。V8被設(shè)計用于提高Web瀏覽器中Java的執(zhí)行性能,通過即時編譯JIT(Just-In-Time)技術(shù),在執(zhí)行時將Java代碼編譯成更為高效的機器代碼并保存,下次執(zhí)行同一代碼段時無需再編譯,使得Java獲得了幾十倍的性能提升。
  然而,Java是個無類型(untyped,變量沒有類型)的語言,這直接導(dǎo)致表達(dá)式c=a+b有多重含義:
  a、b均為數(shù)字,則算術(shù)運算符+表示值相加;
  a、b為字符串,則+運算符表示字符串連接;
  ……
  表達(dá)式執(zhí)行時,JIT編譯器需要檢查a和b的類型,確定操作行為。若a、b均為數(shù)字,JIT編譯器則將a、b確認(rèn)為整型,而一旦某一變量變成字符串,JIT編譯器則不得不將之前編譯的機器碼推倒重來。由此可見,Java的無類型特性建立在消耗大量性能代價的基礎(chǔ)之上。即便JIT編譯器在對變量類型發(fā)生變化時已進(jìn)行相應(yīng)優(yōu)化,但仍然有很多情況Java引擎未進(jìn)行或無法優(yōu)化,例如for-of、try-catch、try-finally、with語句以及復(fù)合let、const賦值的函數(shù)等。
  由此可見,Java的無類型是Java引擎的性能瓶頸之一,改進(jìn)方案有兩種:一是設(shè)計一門新的強類型語言并強制開發(fā)者進(jìn)行類型指定;二是給現(xiàn)有的Java加上變量類型。
  微軟開發(fā)的Type屬于第一種改進(jìn)方案。它是擴展了Java特性的語言,包含了類型批注,編譯時類型檢查,類型推斷和擦除等功能,Type開發(fā)者在聲明變量時指定類型,使得Java引擎能夠更快將這種強類型的語言編譯成弱類型。
  看看第二種方案:
  WebAssembly的起源及實踐分析
  代碼1
  代碼1表示帶有兩個參數(shù)(a和b)的Java函數(shù),和通常Java代碼不同的地方在于a=a | 0及b=b | 0,以及返回值后面均利用標(biāo)注進(jìn)行了按位OR操作。這么做的優(yōu)點是使Java引擎強制轉(zhuǎn)換變量的值為整型執(zhí)行。通過標(biāo)注加上變量類型,Java引擎就能更快地編譯。
  既然增加變量類型能夠提升Web性能,有沒有辦法將靜態(tài)類型代碼例如C/C++等轉(zhuǎn)換成Java指令的子集呢?上面的這段代碼恰恰是作為Java子集的asm.js,由代碼2的C語言編譯而來:
  WebAssembly的起源及實踐分析
  代碼2
  事實上,早在1995年起就已經(jīng)有Netscape Plugin API(NPAPI)在內(nèi)的可以使用瀏覽器運行C/C++程序的項目在開發(fā)。而2013年問世的asm.js是目前較為廣泛的方案。asm.js是一種中間編程語言,允許用C/C++語言編寫的計算機軟件作為Web應(yīng)用程序運行,并保持更好的性能,而Mozilla Firefox從版本22起成為第一個為asm.js特別優(yōu)化的網(wǎng)頁瀏覽器。
  Google也同樣在為原生代碼運行在Web端而努力。Google Native Client(NaCl)采用沙盒技術(shù),讓Intel x86、ARM或MIPS子集的機器碼直接在沙盒上運行。它能夠在無需安裝插件的情況下從瀏覽器直接運行原生可執(zhí)行代碼,使Web應(yīng)用程序可以用接近于機器碼運作的速度來運行。而Google Portable Native Client(PNaCl)則稍有變化,通過一些前端編譯器將C/C++源代碼編譯成LLVM的中間字節(jié)碼而不是x86或ARM代碼,并且進(jìn)行優(yōu)化以及鏈接。
  

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: 天天澡天天摸天天添视频 | 毛片在线播放网址 | 四虎免费影院4hu永久免费 | 中文字幕777 | 可以免费观看的黄色网址 | 亚洲成人在线网站 | 国产美女动态免费视频 | 久草五月| 婷婷激情四月 | 天天色色网 | 天天操天天射天天插 | 热re99久久国产精品 | 久色网 | 在线免费国产 | 天天看天天爽天天摸天天添 | 黄色片网站日本 | 国产做a爰片久久毛片a | 色播欧美| 日韩亚洲欧美日本精品va | 蕾丝视频成人★在线观看 | 永久免费毛片 | 波多野结衣久久精品 | 欧美作爱福利免费观看视频 | 狠狠色狠狠色狠狠五月ady | 一级片免费视频 | 天堂网中文字幕 | 在线久综合色手机在线播放 | jizz免费一区二区三区 | 99精品在免费线视频 | 欧美极品一区 | 国产黄色视屏 | 国产在线观看午夜不卡 | 5g成人影院| 免费爱爱网站 | 九九热在线免费观看 | 爽死你个放荡粗暴小淫视频 | 亚洲午夜顶级嘿嘿嘿影院 | 欧美色综合高清视频在线 | 一二三区在线视频 | 亚洲国产精品国产自在在线 | 久久国产精品自在自线 |