这可能有点模糊。
我正在使用javascript(http://jsatari.com/demo/和https://github.com/docmarionum1/jsAtari)开发Atari 2600模拟器,它的速度非常慢。镀铬约15-20 FPS,Firefox约2-3 FPS(在我的电脑上)。
我已经使用Chrome和Firebug的分析器优化了我的代码并优化了我能做的任何事情,但我从我需要的东西中获得了很多,而且我的算法没有太多改进空间。 (或者,至少在没有明显偏离原始硬件实现的情况下。)
到目前为止,我最大的改进并非来自改进算法,而是来自改变我的数据结构:
将我的大型数组(数千个元素)切换为Typed Arrays,提供了最大的性能提升。 Firefox会在切换之前冻结,Chrome的速度提高约10倍。
我用一些变量和switch语句替换了一些较小的数组,同时也显着提升了性能。
所以,很明显阵列非常慢。
一般来说,性能看起来非常挑剔,我的代码变化很小,导致性能发生很大变化(无论好坏。)还是有其他可能影响性能的奇怪之处?
例如,使用对象文字表示法创建的对象是否由引擎表示不同?仅仅在对象中添加或删除变量时,我已经看到了性能的显着变化,即使它们没有被使用。变量的数量应该影响吗?
javascript(如Typed Arrays)中是否还有其他可能会对性能产生重大影响的新进展?
最后,有没有什么好方法可以跟踪这些无形资产的表现?分析器似乎没有帮助,因为整个脚本有变化,而不仅仅是某些部分。
答案 0 :(得分:2)
我看到,您在UpdatePos方法中创建了许多闭包(并直接执行它们)。当你这么做时,大量使用闭包可能是一个很大的性能问题。
我建议你看一下像Google封闭编译器这样的JavaScript优化工具http://closure-compiler.appspot.com/home我真的可以推荐使用高级优化(但是你必须给他所有的javascript代码 - 否则或者如果你使用eval你(可能)会遇到问题(因为他不仅重命名局部变量并删除未使用的代码))