iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0
自我挑戰組

I don't know JS yet系列 第 6

[ Day 6 ] I don't know JS yet - WASM

  • 分享至 

  • xImage
  •  

回想昨日的學習,JS 是 interpreted language;在 JS engine 會有 parser 將 JS 解析成 AST,再藉由 interpreter 轉成 binary code,並與此同時藉由 optimizing compiler 轉成 optimized codes,這個優化過的 codes 就會被執行。

開始今天份的學習

Web Assembly

JS 演變的過程,其中有個重要的因素 -- 效能 ( performance ),這兩項是重點:

  • JS 被解析 ( parsed ) 與被編譯 ( compiled ) 的速度
  • JS 被執行 ( executed ) 的速度

ASM.js

2013 年,有群 Mozilla Firefox 的工程師研發出 Unreal 3 game engine 可以從 C 到 JS。Unreal 3 engine 使用的 JS 版本是 JS 的 subset -- ASM.js。 那為什麼 Unreal 3 要使用 ASM.js ?

ASM.js 之於 「效能」

Unreal 3 game engine 使用的 JS 版本,在 browser JS engine 上以 full 60fps 的效能去執行,這樣能優化效能,那為什麼可以達到?原因就在這個 unreal 3 game engine JS 版本臨摹 ASM.js 的 style。而 ASM.js 就是有這種特性,可使效能優化。

WASM

幾年後,有一群工程師推出 WASM,與 ASM.js 相似的地方在於,這兩者的初衷都是讓不是 JS 的語言能在 JS engine 上執行。與 ASM.js 不同的地方在於,WASM 避開了在 JS從解析、編譯到被執行之間時間。

AOT

(這部分又是另一個知識,我提的是基本內容)
以 WASM 為導向的專案,解析、編譯都是 AOT ( ahead of time ),其傳進 JS engine 是已經可以被執行的 binary-packed 形式,所以過程已經被精簡很多(有別於要在 engine 做解析、編譯等)。

WASM 的應用很廣泛,不僅用在 web,還有其他地方。

回歸今天的開頭,JS 演變有個重要的因素 -- 效能,而 WASM 藉由傳遞 binary-packed program 進入 JS engine 以縮短 js 執行的時間( 省去解析、編譯 )能達到效能的優化。

今天份的學習到這邊

[ 參考 ]


上一篇
[ Day 5 ] I don't know JS yet - 直譯還編譯 ?
下一篇
[ Day 7 ] I don't know JS yet - treat each JS file as a program
系列文
I don't know JS yet30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言