2011-07-30 68 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你(可能)会遇到问题(因为他不仅重命名本地变量并删除未使用的代码))