起初听起来像是一个奇怪的问题-但请忍受。
我写了一个基于setTimeout的基准测试(类似于stats.js)-这个想法是为了比较动画在不同条件下的表现(例如向其添加不同的CSS3属性)。对于(简单的)示例,我需要对旋转进行旋转,然后将阴影设置为动画,然后在第二次运行中移除旋转,并在第三次运行中移除阴影。之后,我将使用3个基准数字来比较每个动画的效果。
只要动画未通过GPU加速,此方法就可以很好地工作(出于明显的原因,即,硬件加速会将动画从页面的单进程结构中删除)。
但这也带给我一个百万美元的问题-如果我优化某些东西以在没有GPU加速的情况下更好地运行,这是否意味着在启用GPU加速的情况下,相同的优化动画会更好地运行(更快或更少的内存使用)?还是适用不同的规则?
让我给你一个简单的例子。 CSS3盒子阴影几乎会破坏任何动画的性能。在更简单的情况下,可以通过用类似阴影的光栅化(PNG?)图像替换CSS3盒形阴影来增强性能。但是,在使用GPU的情况下,用肉眼看不到它的好处,因为这两个动画的运行速度几乎一样快(因为再次-我无法跟踪在使用GPU的情况下性能的变化)。再说一遍-开启和关闭GPU是否适用相同的规则?
我最初的冲动是-一旦进行了优化,无论GPU开启还是关闭,它的运行效果都会更好。但是就像我在下面的评论中提到的(如果我理解错误,请更正我),但是硬件加速的元素被缓存为GPU上的预渲染栅格纹理。如果是这样-如果我的阴影是CSS3框阴影或基于图像的PNG阴影,为什么会有所不同?我的意思是,这两个元素都可以在GPU开启的情况下变成栅格化纹理,对吗?因此,使用GPU开启时,我的优化将不再有意义吗? (除非再次在内存使用方面有所不同...)
最佳答案
是的,一点没错。在here中查找有关GPU加速有什么影响和没有影响的一点信息。但是总的想法是,是的,它将保留您的大多数优化。现在,相对而言,给定的优化多少会影响GPU卸载后的性能。这是一个很难回答的问题。