在Chrome DevTools中,在“渲染”下,可以选择“显示潜在的滚动瓶颈”。
当我启用此功能时,我在屏幕上显示的div
元素overflow:scroll
会在顶部显示一个标记,表示“在滚动时重新绘制。”
我找不到很多关于这个功能的文档,我不知道它是否可以实际修复或改进,或者只是一个事实陈述 - div有内容,而且确实滚动
答案 0 :(得分:52)
您可以在div
上使用overflow: scroll
或overflow: auto
来创建滚动瓶颈。
transform: translateZ(0);
-webkit-transform: translateZ(0);
这会强制浏览器创建一个新图层来绘制此元素,有时会修复滚动瓶颈(特别是使用Webkit)。
答案 1 :(得分:21)
虽然接受的答案解决了问题,但值得查看CSS will-change
属性。这最近优于transform: translateZ(0);
。这篇文章解释了细节上的差异 - https://dev.opera.com/articles/css-will-change-property/
.scroll-container {
will-change: transform;
}
答案 2 :(得分:16)
这让我惊讶地花了好几天时间来追踪发生了什么,只是因为我在 Chromium bugtracker Issue 514303的错误报告结尾处看到了一方评论。以下是发生了什么以及如何解决问题:
存在一个名为" LCD text"的概念,我认为这意味着亚像素抗锯齿,即"更清晰的文本"。不幸的是,此功能与合成器加速滚动互不兼容。
默认情况下(至少在Blink / Webkit上)启用LCD文本所有平台都不是高DPI(大多数普通显示器;即你可以检查console.log(devicePixelRatio)
)。另一方面,默认情况下,高DPI设备(想想Retina显示屏,或大多数移动设备和平板电脑)上的LCD文本已禁用,因为您并不真正需要更清晰,更清晰的文本"高DPI平台上的功能。
因此,对于合成器加速滚动而言恰恰相反:只有在禁用LCD文本的高DPI平台上才能实现。
但是,您可以通过将overflow:scroll
元素添加到其自己的层,通过向该元素添加will-change:transform
,或者强制溢出的任何hackish等效项,强制在大多数监视器上强制进行合成器加速滚动element作为自己图层的父级(例如transform:translateZ(0)
)。 (请注意,正在删除供应商前缀。)
tl; dr:Chrome并不假设子像素抗锯齿和gpu辅助滚动;挑选一个或另一个。亚像素抗锯齿是Chrome上的默认选择(手机和视网膜显示器除外,因为它们的文字非常小,您不需要该功能,因此您不会在这些平台上注意到这个问题)。通过使用will-change:transform
强制元素进入自己的合成器图层来覆盖它(但请注意,您的文本可能看起来并不完美)。
答案 3 :(得分:-5)
不,你不能修改它,它是一个Chrome功能,让你知道,在窗口中绘制了每个更新的内容。
更新可以有很多不同的东西(滚动,鼠标移动,间隔,请求抽象框架......)。
但是,现在您知道了,您可以增强您的代码。
如果(我不知道),浏览器总是重新绘制div
,如果设置为溢出滚动,你可以在屏幕外做一些JS设置为overflow hidden
...
This post谈论不同的浏览器布局