performance - <canvas> 和 <div> 的效率

标签 performance html canvas css-sprites

我想问问是否有人可以给我一些关于我想做出的设计决定的提示。

我的项目将包含一些 Sprite (预计屏幕上同时显示 10 到 30 个),并且有多种实现它们的方法。一种方法是 CSS-Sprites,另一种方法是在 Canvas 上绘制它们。两者都不难。背景将是由另一个人绘制的瓷砖 map <canvas> , 在后台。

我看过 Crafty将 Sprites 附加为 <div><canvas> 中的 HTML 中, 作为 CSS-Sprite。我不确定 <div> 是否存在速度差异是否在 Canvas 中。有区别吗?

我希望用户通过鼠标点击、向左、向右等方式与 sprite 进行交互。当然,sprite 会在图 block map 的元素上站立或行走。那么为 <canvas> 编写处理程序是否更有效?并找到 Sprite ,或者更确切地说使用 <div>并让浏览器处理发现的结果?

我希望我能传达我的问题。

最佳答案

我的测试表明,对于 Sprite 来说,纯 HTML + CSS 通常比 Canvas 更快:
Performance of moving image on web page via CSS vs HTML5 Canvas

在此处查看测试和结果(来自 10 个月前的浏览器):
http://phrogz.net/tmp/image_move_speed.html

具体来说,我有两个测试几乎和你的问题完全一样:

汇总 FPS:

                  Image  Image  Sprite  Sprite
        Browser  Canvas    CSS  Canvas     CSS
----------------------------------------------
  Safari v5.0.3      59     95      59      89
Firefox v3.6.13      59     95      60      90
 Firefox v4.0b8      75     89      78      82
    Chrome v8.0     108    230     120     204
    iPad, Horiz      17     44       2      14
     iPad, Vert       4     75       2      15

较新的浏览器通常要快得多(Chrome 几乎总是在同一台机器上达到 250fps 的内部上限)并且缩小差距,但使用 Canvas 仍然更慢并且工作量更大。

关于performance - <canvas> 和 <div> 的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8009128/

相关文章:

c++ - 如何提高内联函数效率?

javascript - 有没有更好的方法在 JavaScript 中编写这个开关?

jquery - IE 假文本阴影与其文本分开流动

javascript - 使用 Javascript 的等高列

javascript - 如何在 SVG 上绘制与给定图像数据形状完全相同的折线对象

html - Canvas 上的绘制是否基于现有内容进行了优化?

angular - "Canvas is not a constructor"错误 - 将 Fabric JS 与 Angular 6 一起使用

php - 编写干净高效的 PHP 代码

c++ - 需要一种更快的方法将 cv::Mat 转换为一维 vector 形式

eclipse - 无法访问jsp文件上的图像