回想昨日的學習,JS 是 interpreted language;在 JS engine 會有 parser 將 JS 解析成 AST,再藉由 interpreter 轉成 binary code,並與此同時藉由 optimizing compiler 轉成 optimized codes,這個優化過的 codes 就會被執行。
開始今天份的學習
JS 演變的過程,其中有個重要的因素 -- 效能 ( performance ),這兩項是重點:
2013 年,有群 Mozilla Firefox 的工程師研發出 Unreal 3 game engine 可以從 C 到 JS。Unreal 3 engine 使用的 JS 版本是 JS 的 subset -- ASM.js。 那為什麼 Unreal 3 要使用 ASM.js ?
Unreal 3 game engine 使用的 JS 版本,在 browser JS engine 上以 full 60fps 的效能去執行,這樣能優化效能,那為什麼可以達到?原因就在這個 unreal 3 game engine JS 版本臨摹 ASM.js 的 style。而 ASM.js 就是有這種特性,可使效能優化。
幾年後,有一群工程師推出 WASM,與 ASM.js 相似的地方在於,這兩者的初衷都是讓不是 JS 的語言能在 JS engine 上執行。與 ASM.js 不同的地方在於,WASM 避開了在 JS從解析、編譯到被執行之間時間。
(這部分又是另一個知識,我提的是基本內容)
以 WASM 為導向的專案,解析、編譯都是 AOT ( ahead of time ),其傳進 JS engine 是已經可以被執行的 binary-packed 形式,所以過程已經被精簡很多(有別於要在 engine 做解析、編譯等)。
WASM 的應用很廣泛,不僅用在 web,還有其他地方。
回歸今天的開頭,JS 演變有個重要的因素 -- 效能,而 WASM 藉由傳遞 binary-packed program 進入 JS engine 以縮短 js 執行的時間( 省去解析、編譯 )能達到效能的優化。
今天份的學習到這邊