起初这听起来像是一个奇怪的问题 - 但请耐心等待。
我编写了一个基于 setTimeout 的基准测试(类似于stats.js)——其想法是比较动画在不同条件下的执行情况(例如添加不同的 CSS3 属性)。对于(简单)示例,我将制作带有旋转和框阴影动画的东西,然后在第二次运行中删除旋转,在第三次运行中删除框阴影。之后,我将有 3 个基准数字来比较每个动画的执行情况。
只要动画不是 GPU 加速的(出于显而易见的原因,即硬件加速将动画从页面的单进程结构中删除),这种方法就可以很好地工作。
但这也让我想到了百万美元的问题——如果我优化某些东西以在没有 GPU 加速的情况下运行得更好,这是否意味着相同的优化动画在 GPU 加速打开的情况下会运行得更好(更快或更少的内存使用)?还是适用不同的规则?
让我给你一个更简单的例子。CSS3 box-shadow 会影响几乎所有动画的性能。在更简单的情况下,您可以通过将 CSS3 box-shadow 替换为类似阴影的光栅化(PNG?)图像来提高性能。然而,使用 GPU 时,其好处对肉眼来说并不那么明显,因为两种动画的运行速度几乎一样快(因为再次 - 我无法跟踪使用 GPU 时的性能变化)。再说一遍 - GPU-on 和-off 是否适用相同的规则?
我最初的冲动是 - 一旦优化了某些东西 - 无论 GPU 开启还是关闭,它都会运行得更好。但是就像我在下面的评论中提到的那样(如果我理解错了请纠正我),但是硬件加速的元素被缓存为 GPU 上的预渲染光栅纹理。如果那是真的 - 如果我的阴影是 CSS3 框阴影或基于图像的 PNG 阴影,为什么会有任何不同?我的意思是这两个元素在 GPU 上都会变成光栅化纹理,对吧?所以我的优化对 GPU 没有任何意义?(除非内存使用再次出现某种差异......)