我正在研究一些嚴重依賴現代JavaScript優化來提高性能的代碼(用於音頻處理)。我動態生成JS方法來對Int32Arrays的內容做一堆算術,並且我希望這些方法儘可能快地運行。 「魔術」優化效果相當不錯,我對如何幫助它有所瞭解,但我想知道是否有辦法改進。JavaScript JIT的顯式控制?
對我而言,如果我有一些方法可以告訴JavaScript引擎「這個方法總是運行得非常熱,而且它的參數類型永遠不會改變」,那就好了。這樣,(1)編譯器可能會更快更好地工作,以及(2)如果參數類型錯誤,或者由於某種其他原因導致優化失敗,我可以得到異常而不是默默地回落到解釋器。
有沒有人知道這種標準或舉措?或者說失敗了,是否有配置工具可以查看我的代碼究竟是如何被優化的(在Chrome,Firefox和Safari中)?
更新
關於asm.js--我沒有聽說過的that--它聽起來很酷,而且有很多是非常有用的技巧,瞭解了這種工作。
據我所知,asm.js本身只是編寫高度優化的JavaScript的約定,而不是JS引擎的新規範。然而,它確實定義了一種方法來標記符合的代碼段(通過將"use asm";
放在方法的開頭),意圖是未來的JS引擎將對此做出響應,並使用特殊的AOT(Ahead-A-Time-Time)編譯器對這些章節,報告錯誤控制檯如果代碼不符合有關類型安全等更爲嚴格的標準
AFAICT Mozilla的有started上AOT編譯器,和谷歌talking seriously關於它V8。我找不到有關JavaScriptCore計劃的任何內容,並且我不會屏住IE的屏幕。
但它確實回答了我的問題,我想 - 如果我生成的代碼現在可以通過asm.js進行驗證,沒有任何缺點,並且在將來的瀏覽器中,我可能會遇到性能上的問題。
是[ASM。 js](http://asmjs.org/)相關? – Esailija