背景画布与普通画布的性能
Performance of background-canvas vs. regular canvas
一段时间后,webkit(以及Safari)开始支持CSS canvas-background元素(来源:http://www.webkit.org/blog/176/css-canvas-drawing/)。
这可以极大地简化游戏和多媒体的创建,因为您不需要将画布标签注入DIV(例如),而只需直接挂钩到DIV的背景中。例如:
<div id="gameview"
style="background: -webkit-canvas(myscreen); width: 320px; height: 480px;">
</div>
<script>
var target = document.getElementById("gameview");
var wd = target.clientWidth;
var hd = target.clientHeight;
var context = document.getCSSCanvasContext("2d", "myscreen", wd, hd);
/* draw stuff here */
</script>
我想知道,这涉及到任何速度处罚吗?从理论上讲,我认为绘制背景画布应该比绘制画布标签更快,特别是如果目标元素是空的。
有人在高速演示或游戏中测试过这个吗?根据我的测试(也以相反的顺序运行),原始canvas
元素略慢,但始终比背景canvas
慢。
铬17在一个棋盘上画了10000次:
- ~ 470ms背景画布
-
~ 520ms
canvas
元件
Safari 5显示了类似的动态。
尝试将迭代次数设置为100000,结果应与上述一致。
半年后更新
我们在一个项目中尝试了背景画布方法(作为一个小优化的尝试),结果与我们的预期截然相反。整个东西(两层:一层-带有背景画布的div
,另一层-普通画布)变得稍微慢一些。事实上,当我们引入背景画布时,应用程序变得非常慢。
我绝对不会保证背景画布在所有情况下都更快。
test.php:11Regular Canvas 606
test.php:20Background Canvas 449
test.php:11Regular Canvas 516
test.php:20Background Canvas 483
Regular在我的测试中表现不如背景画布在linux debian chrome上,这里使用的代码(也添加到http://jsfiddle.net/hDPVr/)
<div style="width:300; height:200; background: -webkit-canvas(test_canvas); "></div>
<canvas id="canvas" style="width:300; height:200;"></div>
<script type="text/javascript">
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
var regular_timer = new Date().getTime() ;
for( var i = 0; i<100000; i++ ){
context.fillRect( 0,0,10,10);
}
console.log( 'Regular Canvas', regular_timer - (new Date().getTime()) )
var context = document.getCSSCanvasContext('2d', 'test_canvas', 300, 200);
var background_timer = new Date().getTime() ;
for( var i = 0; i<100000; i++ ){
context.fillRect( 0,0,10,10);
}
console.log( 'Background Canvas', background_timer - (new Date().getTime()) )
</script>
所以我唯一做的测试是fillRect,但在某些情况下它仍然至少好10%
相关文章:
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 函数参数中的数据与指定变量之间的任何性能差异
- 提高JQuery的性能
- 可以在这里为背景图像设置滤镜吗
- 如何使用jquery更改html中的背景颜色
- 使用 js 将背景图像设置为 HTML
- 使用带括号的图像URL作为jQuery的背景
- 使用正则表达式评估电子邮件地址时出现性能问题
- 如何使用css动画/javascript使具有背景图像的元素出现
- 循环浏览多个身体背景图像
- React:按键的性能提升
- 在Three.js中导出网格会提高性能吗
- 将淡入淡出添加到“我的身体背景滑块”
- 在javascript中搜索项目列表的性能
- 浮动图像左作为背景-css
- Fullpage.js-视频+背景在同一部分
- 为什么在许多浏览器中drawImage()的性能略好于createPattern()
- 背景图像顶部的滚动图像不移动
- 许多css背景的性能
- 背景画布与普通画布的性能