javascript - 为什么 CSS matrix3d 比 CSS position 渲染得更快?

标签 javascript html css matrix

假设我想将一个元素从左边移动到右边,我可以这样做

 transform: translate3d(200px,0,0);
 /*or*/
 transform: translateX(200px);

 transform: matrix3d(x,x,x,x,x,x,x,x,x,x,x,x,200,x,x,x)

或者只是设置左边的位置

为什么 CSS matrix3d 渲染速度比仅设置位置 left/top 更快? enter image description here enter image description here

更新:

CSS animation of top/left vs transform in slow-mo.

high performance animations on HTML5

最佳答案

这里有两个相关的因素

1) 因为 left 可能会影响页面中的所有布局,所以它会强制重新计算样式和布局。转换不需要这一步,转换不会影响元素的邻居。

参见 html5 - high performance animations为了更好的解释

2) 因为大多数 3d 工作是由 GPU 而不是 CPU 处理的。 GPU 不仅可以更快地完成这项工作,还可以释放 CPU 以更好地处理其余工作。你会看到很多时候的风格

transform: translateZ(0px);

wich 显然什么都不做,但这会让兄弟使用 GPU 并加速这个过程。您可以尝试测量添加此行后左侧的变化,看看性能如何。

关于javascript - 为什么 CSS matrix3d 比 CSS position 渲染得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23573621/

相关文章:

javascript - 如何制作一个文本框和按钮,以便它触发 javascript 方法而不是发布?

javascript - 如何对一个JS数组进行批量排序(为了性能)

javascript - 如何在 jquery 中从其他基于组的索引设置事件类一个组元素?

html - 在 div 之间添加链接时的 css 垂直空白

html - 浏览器尝试下载 html 文件而不是打开

javascript - 在 Angular 中设置默认选择文本

javascript - 仅当 'beforeunload' 函数返回 true 时才运行 Javascript 代码

html - 如何停止下拉列表出现在列表项的顶部

html - inline-block 适用于哪个元素?

html - 用于元素轮播的 CSS(容器具有固定宽度,可滚动区域具有无限宽度)