2013-04-18 21 views
2

我正在研究一些嚴重依賴現代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進行驗證,沒有任何缺點,並且在將來的瀏覽器中,我可能會遇到性能上的問題。

+1

是[ASM。 js](http://asmjs.org/)相關? – Esailija

回答

1

Chrome的V8引擎有很多這種類型的調試選項。我想你會發現這個博客帖子有用:

Optimizing for V8 - Introduction

(這實際上是一個全系列的帖子,這樣你就可以進入更高級的選項,如果你繼續讀。)

+0

這聽起來很有用。即使除了音頻處理代碼之外,我的項目也變得非常龐大,所以我想我會花一些時間來處理這個分析器。 – bobtato