微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

html – 当使用overflow-y时,减少滚动滑动:scroll;

我有一个2列布局,右边的列是一个可滚动的结果列表,最多可以有200个项目结果(基本上只有一个带有overflow-y:scroll; set的ul)

我所发现的是,当您滚动时,右侧的列会导致一些jank(在低端硬件上尤其明显).

在chrome时间轴中,我可以在滚动列时看到一些主要的“更新图层树”.
有什么办法可以弄清楚为什么“更新图层树”是如此漫长,什么CSS属性影响速度最多?
当我点击它 – 只是给我的信息,它运行了多长时间,没有别的.

我在每个li中都有一些CSS,效果不好(例如,过滤器,转换,Box-shadows等)
如果我逐个删除每个SASS文件,它可以提高滚动性能(并且一旦我删除所有的CSS,最终会删除jank),但显然很难指出哪些CSS属性不执行此操作.

我想知道如果我在chrome时间表中缺少可以在这方面有帮助的内容吗?

我试图使用意志变化的CSS属性来促进滚动到不同的层/强制硬件加速 – 但这并没有太大的区别.

此外,我滚动时没有执行JavaScript事件.

限制不到200个项目不是一个选择.

我已经设置了一个例子(我知道它的一个更长的项目列表,但这只是为了演示目的):
https://github.com/jooj123/jank/blob/master/scroll.html

真正有趣的是,如果我删除overflow-y:scroll; (在.map-search__结果在上面的例子中)滚动变得非常顺利并且jank消失了 – 为什么这么多效果

这是chrome时间轴(基本上只是长的“更新图层树”部分):

固定:

Paul’s answer about will-transform is spot on,特别是这个tidbit帮助:

“Add will-change: transform;. Once added,the “repaints on scroll” rect is gone.”

但是要小心,因为它永远不会总是应用,根据你的代码库,检查滚动性能问题指标,以确保“重绘滚动”是关闭的,对于我,我也必须禁用-webkit-clip-path属性(在我的实际的代码库 – 不在演示版本中提供),这是在其中一个子div中设置的,请参阅:

解决方法

我试过了 your test page,看了看.

首先,滚动的perf问题我喜欢在“渲染”窗格中的几个复选框上翻转:

瞬间,我们可以看到这个div被称为“滚动重绘”.然后,您可以在实验层面板中验证:

(我右键单击树中并选择“显示内部图层”btw)

现在,大的“更新层树”成本通常是由层的LOTS或几个尺寸非常大的层造成的.在这种情况下,我们真的没有.但是我们确实有一个滚动层没有得到合成滚动.

复合滚动==快速滚动==通常认.但是在这样的情况下,我们回到“主线程滚动”,这是真的很慢和吸吮.在正面方面,crbug.com/381840即将修复,应自动修复此测试用例.好极了!但是现在我们可以解决它.

解决方法

你确实提到你尝试了意志变化,没有任何效果,但尝试自己已经很好了.它属于具有溢出集的元素,在本例中为.map-search__results选择器.添加意志变换:变换.一旦添加,“滚动的重绘”直到没有了.然后用时间线测量,它更好.

这是一个前/后视图:



link to viewer

祝你好运!

原文地址:https://www.jb51.cc/html/230686.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐