圖片來源: 

Mozilla部落格

Asm.js架構是Firefox用來加速Javascript的武器,它可以讓Javascript的程式執行效能大幅提升,甚至很貼近原生程式碼(Native code)的執行速度,經Asm.js架構最佳化後的程式碼,執行時間約莫僅比原生程式碼慢1.5倍。

Javascript語言先天設計就不是以高效能為目標,所以難以進行最佳化。其弱型別(Weak type)的特性,讓不同型別可以直接互相轉換,但是當瀏覽器以JIT(Just in time)編譯Javascript時,容易會發生問題或是在執行效能上遭遇瓶頸。這些問題使瀏覽器開發者欲改善Javascript引擎執行效率,最後卻遭受Javascript語言本身限制而碰壁。

Firefox採用有別於直接提升Javascript引擎執行效率的策略,Asm.js架構限制Javascript的功能,拿掉會影響執行效能的部分,所以Asm.js可以說是原始Javascript的瘦身版本,減少了動態型別轉換、記憶體的配置與回收,留下少數嚴格定義的浮點數與整數運算子,因此Asm.js很容易最佳化。

Asm.js取名靈感之一來自組合語言(Assembly language),因為Javascript瘦身過後的Asm.js,犧牲了一些功能,就像是組合語言一樣,不只功能少,且為了效能還需要撰寫冗長的程式碼。不過Firefox並非讓Web應用程式開發者直接使用Asm.js,而是讓開發者先以高階語言C/C++撰寫程式,再以Emscripten編譯器成asm.js的程式。

Asm.js不只可以提升Javascript執行效率,另一項最佳化的成果,便是提升啟動速度,Firefox對AOT(Ahead of time)編譯進行快取,因此可以大幅提升遊戲的啟動速度,這對於遊戲移往瀏覽器平台是一大推力。Mozilla與Unity也在今年的遊戲開發者大會 (Game Developers Conference,GDC)上,發表新的遊戲部署工具,其中也包含了Asm.js。


Advertisement

更多 iThome相關內容