javascript - 背景 Canvas 与常规 Canvas 的性能

标签 javascript canvas safari webkit

不久前,webkit(以及 Safari)开始支持元素的 CSS Canvas 背景(来源:http://www.webkit.org/blog/176/css-canvas-drawing/)。

这可以大大简化游戏和多媒体的创建,因为您不需要将 Canvas 标签注入(inject) 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 标签更快,尤其是在目标元素为空的情况下。

有人测试过这个用于高速演示或游戏吗?

最佳答案

根据 my tests (也运行 in reversed order ),原始 canvas 元素略微但始终比背景 canvas 慢。

Chromium 17 绘制棋盘 10000 次:

  • ~470 毫秒在背景 Canvas 上
  • canvas 元素上约 520 毫秒

Safari 5 显示了类似的动态。

尝试将迭代次数设置为100000,结果应该与上面一致。


半年后更新

我们在一个项目中尝试了背景 Canvas 方法(作为一个小优化的尝试),结果与我们的预期大相径庭。整个事情(两层:一层 - 带有背景 Canvas 的 div,另一层 - 普通 Canvas )变得稍微慢一些。事实上,当我们引入背景 Canvas 时,应用程序变得非常慢。在 Chrome 21 中测试。

我绝对不会保证背景 Canvas 在所有情况下都更快。

关于javascript - 背景 Canvas 与常规 Canvas 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8263549/

相关文章:

css - Safari 不显示字体正确,但其他人却显示,为什么?

javascript - iPhone safari 底部栏

javascript - 当为 null 时设置 JavaScript 对象成员的默认值

javascript - 当用户在卸载时注销时,他们也会在重新加载时注销

javascript - Promise.all() 在完成之前停止工作

javascript - FabricJS-Javascript-PHP : Export SVG save on server

javascript - 将 HTML 绘制到 Canvas

javascript - 如何在WebView中绘制Canvas?

html - 为什么我仍然可以在 iOS 7 中缩放视口(viewport)

javascript - 根据选定的单选按钮和页面加载隐藏下拉选项