WebAssembly--瀏覽器第二語言

導讀:
JavaScript存在什么問題
webAssembly是什么
WebAssembly是如何工作的
WebAssembly能解決什么問題
WebAssembly當前的局限性
demo 案例

JavaScript存在什么問題

JavaScript語言特點:解釋執(zhí)行(動態(tài)語言)定血、弱類型
JavaScript執(zhí)行過程如下:解析—編譯/編譯優(yōu)化—優(yōu)化—執(zhí)行—垃圾回收


js代碼執(zhí)行過程

對比靜態(tài)語言執(zhí)行過程:解碼-編譯/編譯優(yōu)化-執(zhí)行


靜態(tài)語言執(zhí)行

結論:JavaScript不適用CPU密集型和高性能應用

webAssembly是什么

WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine. Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server applications.

WebAssembly(縮寫為 Wasm)是一種基于堆棧式虛擬機的二進制指令集铃绒。Wasm 被設計成為一種編程語言的可移植編譯目標,并且可以通過將其部署在 Web 平臺上,以便為客戶端及服務端應用程序提供服務

相關概念

1、堆棧機
一個簡單的堆棧機計算模型示例如下:
一個簡單的1+2求和程序


堆棧機計算模型--計算過程
計算過程
i32.const 1  |  1
i32.const 2  |  1,2
i32.add      |  3

2、指令集


image.png

參考上圖,計算機的主要架構如上。最底層是 CPU 的指令集旺罢,主要分為復雜指令集和簡單指令集。復雜指令集是 x86绢记、x64(也叫 x86-64, amd64) 兩種架構扁达,專利在 Intel 和 AMD 兩家公司手里, 該架構 CPU 主要是 Intel 和 AMD 兩家公司庭惜,這種 CPU 常用在 PC 機上罩驻,包括 Windows,macOS 和 Linux护赊。簡單指令集是 arm 一種架構惠遏,專利在 ARM 公司手里砾跃,該架構 CPU 主要有高通、三星节吮、蘋果抽高、華為海思、聯(lián)發(fā)科等公司透绩。這種 CPU 常用在手機上翘骂,包括安卓和蘋果。

這里是一個c++階乘函數(shù)編譯為Wasm指令的示例(準確的說WAT并不是指令帚豪,而是WebAssembly 可讀文本格式)


c++/階乘函數(shù)

WAT/階乘函數(shù)

這里的每一條指令都是指令集規(guī)定的內(nèi)容碳竟,規(guī)定了操作碼、操作數(shù)以及具體的功能狸臣。當然這里用WAT格式展示莹桅,主要是為了我們?nèi)祟悂碜x寫。實際存儲文件(Wasm)還是轉(zhuǎn)成 的0,1 序列烛亦。上邊每個單詞都會有一個數(shù)字相對應


webAssembly的微觀世界--字節(jié)碼

webAssembly的微觀世界--字節(jié)碼
WebAssembly是如何工作的

1诈泼、瀏覽器執(zhí)行Wasm過程:加載-編譯-實例化-調(diào)用(執(zhí)行)

瀏覽器執(zhí)行Wasm過程

2、c語言轉(zhuǎn)Wasm在線工具--WasmFiddle
3煤禽、c++語言轉(zhuǎn)Wasm在線工具--WasmExplorer

WebAssembly能解決什么問題

1铐达、web端

  • 使用 Wasm 完全重寫現(xiàn)有框架使用
  • Wasm 重寫現(xiàn)有框架的核心邏輯
  • 使用 Wasm 配合框架增強應用的部分功能
  • 使用其他語言構建 Web 前端框架

2、not in web


單一端運行程序
跨端運行
WebAssembly當前的局限性

1檬果、web兼容度


web兼容情況

2瓮孙、無法直接引用 DOM
3、復雜數(shù)據(jù)類型需要進行編解碼

demo 案例

1汁汗、eBay 的條形碼掃描
eBay 在原生應用中有專門的 C++ 庫用于條形碼的掃描衷畦,在 H5 中利用開源 JavaScript 庫 BarcodeReader 做了一個帶條形碼掃描功能的Web版本。 問題是它只有在 20% 的時間表現(xiàn)良好知牌。 剩余的 80% 的時間運行非常緩慢纹腌,準確率也不高凡傅。最終的解決方案是通過 Wasm ,將原有的 c++ 庫引入死相,以及業(yè)界十分有名的忿墅、基于 C 語言編寫的開源條形碼掃描庫 ZBar 引入扁藕,再加上原本的 js 庫,三者協(xié)助疚脐,最終識別率達到了 100%亿柑。
技術方案設計如下圖所示。


競爭取勝

產(chǎn)品上線后的最終效果如下圖所示棍弄。

功能效果圖

產(chǎn)品在上線使用了一段時間后望薄,eBay 技術團隊對應用的條形碼掃描情況進行了統(tǒng)計疟游,結果發(fā)現(xiàn)有 53% 的成功掃描來自于 ZBar34% 來自于自研的 C++ 庫痕支。剩下的 13% 則來自于第三方的 JavaScript 庫實現(xiàn)颁虐。可見卧须,其中通過 Wasm 實現(xiàn)得到的掃描結果占據(jù)了總成功次數(shù)的 87%另绩。

更詳細的過程可以參考 WebAssembly在eBay的實踐:速度提升50倍

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市花嘶,隨后出現(xiàn)的幾起案子笋籽,更是在濱河造成了極大的恐慌,老刑警劉巖椭员,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件车海,死亡現(xiàn)場離奇詭異,居然都是意外死亡拆撼,警方通過查閱死者的電腦和手機容劳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闸度,“玉大人竭贩,你說我怎么就攤上這事≥航” “怎么了留量?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長哟冬。 經(jīng)常有香客問我楼熄,道長,這世上最難降的妖魔是什么浩峡? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任可岂,我火速辦了婚禮,結果婚禮上翰灾,老公的妹妹穿的比我還像新娘缕粹。我一直安慰自己,他們只是感情好纸淮,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布平斩。 她就那樣靜靜地躺著,像睡著了一般咽块。 火紅的嫁衣襯著肌膚如雪绘面。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音揭璃,去河邊找鬼晚凿。 笑死,一個胖子當著我的面吹牛塘辅,可吹牛的內(nèi)容都是我干的晃虫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼扣墩,長吁一口氣:“原來是場噩夢啊……” “哼哲银!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起呻惕,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤荆责,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后亚脆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體做院,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年濒持,在試婚紗的時候發(fā)現(xiàn)自己被綠了键耕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡柑营,死狀恐怖屈雄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情官套,我是刑警寧澤酒奶,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站奶赔,受9級特大地震影響惋嚎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜站刑,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一另伍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绞旅,春花似錦质况、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽中贝。三九已至囤捻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間邻寿,已是汗流浹背蝎土。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工视哑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人誊涯。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓挡毅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親暴构。 傳聞我的和親對象是個殘疾皇子跪呈,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容