【发布时间】:2021-08-19 00:36:31
【问题描述】:
所以,我有一个在 Javascript 上运行的自然选择模拟,并且我使用 HTML Canvas 作为图形。问题是有数百个物体(生物),每个物体都在循环寻找食物和捕食者,每个物体都有几十个在繁殖时会发生突变的基因(变量)。好吧,图形非常简单(它们只是形状像圆形或椭圆形的彩色单元格),但整个循环嵌套正在扼杀性能。
我正在使用 animate() 函数,它通过 requestAnimationFrame(animate) 调用自身。好吧,在这个 animate() 函数中,除了每帧对屏幕上的每个元素进行整个绘制和重绘之外,我还循环生物数组以对它们中的每一个调用 Hunting() 和 update() 方法。并且有 2 个生物数组(草食动物和肉食动物),其中包含数百个对象,以及一个食物,可以包含数千个。这意味着我每帧循环通过三个数组,更不用说在生物方法内部发生的循环(例如,为了寻找食物,草食动物循环通过屏幕中的所有食物,计算与所有食物的距离,然后才寻找它)。
底线:每帧循环内循环内循环。所以我的问题是:有什么技巧可以提高性能吗?是否有任何工具可以分析代码并指出代码的哪些部分使用最多的内存?是否有(可能有)更有效的动画制作方法?
提前谢谢你!
【问题讨论】:
-
正如@obe 建议的那样,代码分析是要走的路,最好的方法是 Chrome 开发工具。它能够逐帧告诉你问题等等!
-
没有您的代码,我们无法为您提供改进其性能的建议。
标签: javascript performance canvas html5-canvas