【问题标题】:Performant CSS3 animation (Simple animation still not performant in Chrome Developer Tools)高性能 CSS3 动画(简单的动画在 Chrome 开发者工具中仍然没有性能)
【发布时间】:2015-12-07 21:33:32
【问题描述】:

我正在努力寻找一种方法让 CSS 页面转换在 google chrome 中表现良好。

在时间轴上的 Chrome 开发人员工具中,我注意到一些红色标记,它们都表示相同的意思:长帧时间表示卡顿和渲染性能不佳。阅读有关渲染性能的 Web 基础指南了解更多信息。

在我正在开发的似乎合法的应用上,我试图调查,但找不到来源。

我做了一个更简单的演示,但我仍然得到红色标记:http://codepen.io/anything/full/qOOpza/

.page {
  position:absolute;
  top:0;
  left:0;
  width:100%;
  height:100%;
  background:#ccc;
  &--1 {
    background:green;
  }
  &--2 {
    background: yellow;
  }
  &.moveToRight {
        animation: moveToRight ease .5s;
        animation-fill-mode: forwards;
    }

    &.moveToLeft {
        animation: moveToLeft ease .5s;
        animation-fill-mode: forwards;
    }
}


@keyframes moveToRight {
    from { }
    to { transform: translateX(100%); }
}

@keyframes moveToLeft {
    from { }
    to { transform: translateX(0); }
}

【问题讨论】:

    标签: css google-chrome css-transitions


    【解决方案1】:

    我一直在玩 ytour demo,发现了 2 个问题:

    首先,从 translate 更改为 translate3d 会稍微提高(至少在我的系统中)性能。所以,写这个

    @keyframes moveToRight {
        from {     transform: translate3d(0%, 0px, 0px);  }
        to {     transform: translate3d(100%, 0px, 0px);  }
    }
    

    更好。 (这点之前已经讲过好几次了,但检查一下总是好的)。

    另外,一个新的属性应该会有所帮助。设置

    将改变:变换;

    应该让浏览器为将来更改此属性做好准备。但我看不出有什么不同。

    其次,Chrome 收集统计信息的方式似乎存在问题。 您启用了“屏幕截图”。这似乎是延迟的主要原因,Chrome 需要渲染和存储屏幕截图的时间。

    根据定义,性能工具完成其工作所需的时间不应在分析中计算。但这似乎不是这里的情况......我会说这是一个错误。

    至少在我的情况下,更改这两个问题会使红色标记几乎消失

    而且,在剩余的标记帧中,似乎没有任何性能问题。请注意屏幕截图中的帧持续时间为 25.57 毫秒,但 CPU 时间为 1.239 毫秒。

    【讨论】:

    • 感谢您的回答,我稍后会做一些研究,但是在 2015 年使用 i7 处理器和良好的显卡,像这样的简单动画“几乎消失”似乎令人难以置信。
    • @vals 确实有一个非常有效的观点。尝试将滚动处理程序绑定到侦听并至少执行某些操作的页面 - 然后在打开 devTools 的情况下滚动页面。它的流动性将比您预期的要少得多。当然,这是一个极端的例子,但 devTools 也确实会吃掉性能。有时,最好的检查方式是用你出生时的那双好眼睛。
    • @SidneyLiebrand 是的,devtools 可能会降低 CPU 的速度,但如果我在移动设备 (android) 上进行测试,动画会明显变慢。所以,是的,我的问题仍然存在——我怎样才能制作一个看起来像页面转换的高性能 CSS 3animation + 我会补充说速度在桌面上表现良好,但在移动设备上它会破坏 cpu。
    猜你喜欢
    • 2012-04-09
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 2023-04-08
    • 2015-05-08
    相关资源
    最近更新 更多