2011-07-30 69 views
3

這可能有點含糊。技術或數據結構加快Javascript?

我正在使用javascript(http://jsatari.com/demo/https://github.com/docmarionum1/jsAtari)的Atari 2600模擬器,它運行得非常慢。在15-20 FPS左右的鉻合金和2-3 FPS左右的火狐(在我的電腦上)。

我已經通過我的代碼優化了Chrome和Firebug的性能分析器,並優化了我所能做的任何事情,但是我從我需要的內容中選擇了FAR,並且在算法中看不到更多改進空間。 (或者說,至少在沒有從原來的硬件實現顯著分歧。)

到目前爲止我最大的改進不是來自提高的算法,而是從改變我的數據結構:

  • 切換我的大型數組(數千個元素)到Typed Arrays提供了最大的性能提升。在交換機之前,Firefox會凍結,Chrome運行速度提高了10倍。

  • 我用個別變量和開關語句取代了一些較小的數組,同時提供了顯着的性能提升。

所以,看起來非常清楚,數組非常緩慢。

一般來說,性能只是看起來非常挑剔,我的代碼中的小改變導致性能發生了很大的變化(無論好壞)。還是其他可能會影響性能的奇怪因素?

例如,用對象文字符號創建的對象是否由引擎表示不同?即使沒有使用變量,我也看到只是增加或刪除一個對象的變量時,性能發生了明顯的變化。變數的數量是否會影響?

JavaScript中是否還有其他新的開發(如類型化數組)可能會對性能產生重大影響?

最後,有沒有什麼好的方法來跟蹤由於像這些無形資產的表現?分析器似乎沒有幫助,因爲整個腳本有變化,而不僅僅是某些部分。

+0

你最終是否優化了這個,如果是的話,你可以發佈什麼爲你工作? – alex

+0

部分鏈接:http://www.websiteoptimization.com/speed/10/
http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/
另一點:
如果你的javascript只能在當前的瀏覽器上運行 - 有所謂的web工作者提供javascript中的多線程......見
http://blogs.msdn.com/b/davrous/archive/2011/07/15 /介紹到的,HTML5的Web工作者最JavaScript的多線程的方法。aspx
http://www.devarticles.com/c/a/HTML/HTML-5-and-Javascript-Web-Workers/
http://ejohn.org/blog/web-workers/
Yahia

回答

1

我看到了,你創建了許多閉包(並直接執行它們),例如在你的UpdatePos方法中。當你這樣做時,大量的閉包創建可能是一個很大的性能問題。

我會建議你看一下像Google Closure Compiler這樣的JavaScript優化工具http://closure-compiler.appspot.com/home我真的可以使用高級優化技術來進行推薦(但是你必須給他所有的JavaScript代碼 - 否則如果你使用eval你(可能)會遇到問題(因爲他不僅重命名本地變量並刪除未使用的代碼))