从画布中抽出多少时间?

时间:2012-08-07 14:42:53

标签: javascript html5 canvas

我知道HTML5 gamedev中最昂贵的操作之一就是在画布上绘图。但是,如何在之外的中绘制图像呢?这有多贵?当画布是100 x 100像素并且我尝试在(1000,1000)处绘制图像时到底发生了什么?检查精灵坐标以确保它在画布内部会使渲染更有效吗?

2 个答案:

答案 0 :(得分:7)

在这些测试中,我使用的是Google Chrome版本21.0.1180.57。

我做了一个测试这种情况的小提琴......你可以在这里查看:http://jsfiddle.net/Yannbane/Tnahv/

我已经运行了1000000次测试,这是我得到的数据:

在画布内渲染图像持续2399毫秒。
在画布外渲染图像持续888毫秒。

这意味着在画布之外绘图需要花费一些时间,大约是将其渲染到内部所需时间的37%。

结论:最好在渲染之前检查图像是否在画布内。

但是,当然,我想知道有多好......所以,我做了另一次测试。这一次,我当然实现了边界检查,并得到了它只花了3毫秒来“渲染”画布外100万次的图像。这比仅仅在外面渲染它要好29600%。

您可以在此处查看这些测试:http://jsfiddle.net/Yannbane/PVZnz/3/

答案 1 :(得分:3)

您需要自己执行此检查,如果图形不在屏幕内,请跳过绘图。

话虽如此,一些浏览器在某些情况下会对此进行优化。我在IE9性能分析器上写了一篇文章时发现,IE9将优化远离绘制图像,如果它超出界限。转换矩阵可能必须是此优化的标识才能工作,无论哪种方式,您都不应该依赖浏览器来执行此操作。

始终经常检查。

编辑:您可以运行此简单测试以查看:http://jsperf.com/on-screen-vs-off

看起来Chrome和Safari肯定会对它进行优化,至少在简单的情况下,firefox并不是真的