由官方部落格文章可知,透過 JavaScript 執行 1 億次 WebAssembly 函式呼叫的時間,已經從此前的 5500 ms(5.5 秒)、降低到了現在的不到 500 ms(0.5 秒)。
此前,Mozilla 一直在使用 C++ 來幫助理解 WebAssembly 程式碼、並將之傳遞給 JavaScript 程式碼。
為了提升速度,Mozilla 決定直接切斷這個“中間人”。該公司稱:
我們拿到了入口存根處(entry stub)執行的 C++ 程式碼,讓它可被 JIT 程式碼直接呼叫。
當引擎從 JavaScript 向 WebAssembly 切換時,就會解包 entry stub 數值、並將之放到正確的位置。
此外,Mozilla 還提升了透過 WebAssembly 呼叫瀏覽器內建函式的速度,以及從 JavaScript 到 WebAssembly 的單態呼叫。
如果你對內部工作原理的變化深感興趣,請一定不要錯過 Mozilla 官方撰寫的這篇通俗易懂的部落格文章(附有趣味的插圖和註釋)。
由官方部落格文章可知,透過 JavaScript 執行 1 億次 WebAssembly 函式呼叫的時間,已經從此前的 5500 ms(5.5 秒)、降低到了現在的不到 500 ms(0.5 秒)。
在執行依賴於 WebAssembly 的頁面(包括一些基於瀏覽器的遊戲)時,這項改進會更加明顯。此前,Mozilla 一直在使用 C++ 來幫助理解 WebAssembly 程式碼、並將之傳遞給 JavaScript 程式碼。
為了提升速度,Mozilla 決定直接切斷這個“中間人”。該公司稱:
我們拿到了入口存根處(entry stub)執行的 C++ 程式碼,讓它可被 JIT 程式碼直接呼叫。
當引擎從 JavaScript 向 WebAssembly 切換時,就會解包 entry stub 數值、並將之放到正確的位置。
此外,Mozilla 還提升了透過 WebAssembly 呼叫瀏覽器內建函式的速度,以及從 JavaScript 到 WebAssembly 的單態呼叫。
如果你對內部工作原理的變化深感興趣,請一定不要錯過 Mozilla 官方撰寫的這篇通俗易懂的部落格文章(附有趣味的插圖和註釋)。
https://hacks.mozilla.org/2018/10/calls-between-javascript-and-webassembly-are-finally-fast-%f0%9f%8e%89/