【发布时间】:2015-01-28 20:07:27
【问题描述】:
这个问题与我的框架 VilTAGE (https://github.com/ViliX64/VilTAGE) 有关。它是一个 ASCII 网页游戏框架,可以渲染到 Canvas。问题是,绘制时间是计算时间的两倍。
现在渲染的工作方式是每个 CharNode(一个对象,带有文本字符、颜色等)和 CanvasElement 的 HashMap,它上面绘制了文本。当循环想要绘制一个 CharNode(每秒 15-30 次)时,它会通过 HashMap,找到所需的 CanvasElement 并将其呈现给主 CanvasElement。 (见https://github.com/ViliX64/VilTAGE/blob/master/lib/etc/utility.dart)。
单个 CanvasElement 快照很小(通常约为 10x10)。它们是使用 drawImage(..); 绘制的;
问题在于,在具有 70x40 CharNodes 的游戏中,当编译为 JavaScript 时,游戏运行(不出所料)非常慢,甚至更慢。
我是否犯了任何明显的错误,或者您能给我一些提高性能的提示吗?
编辑 1:它在 Firefox 和 IE 上运行最慢。在 Google Chrome 上的性能更好。
【问题讨论】:
-
您正在循环遍历哈希图,而不是像应该使用的那样直接按键获取。改变这个应该会给你一个小的加速。
-
我知道,但我需要相同的值。即使我重写了 == 运算符,它也没有返回所需的 CharNode。不过,感谢您的提示。
-
我已经更新了代码,所以它不会再遍历 hashmap 了。它确实提高了主要在 Firefox 和 IE 上的性能:)
-
很可能您在覆盖 == 时忘记覆盖 hashCode。
-
你试过用chrome或IE的分析器看看哪些函数占用CPU时间最多?
标签: html performance canvas dart