【发布时间】:2013-02-18 18:53:25
【问题描述】:
我有read on SO 和其他地方,重新绘制和重新流动对于浏览器来说是昂贵的。
我很好奇 CSS/JS 替代 re-paint/display:none 和 re-flow/visibility:hidden 对浏览器的计算要求不高。
为了清楚起见,如果我错了,请纠正我,常见的回流场景是当您在要切换显示的元素上设置 display:none 时,例如下拉菜单。重排意味着浏览器首先“流动”,即将元素和下面的一切显示为可见内容,然后必须重新流动所有内容,因为下拉菜单需要隐藏。
也欢迎评论回流和重绘对性能的影响是否真的是人们需要关心的事情。
【问题讨论】:
-
如果要改变显示的内容,至少需要回流和重绘一次。您可以做的最好的事情是通过不将 DOM 更改与计算属性读取交替来最小化重排次数
-
在一个典型的网页上(例如,这里的这个 - Stackoverflow),在它开始看起来生涩之前想要使用的
display:none的典型上限是多少? -
永久隐藏的 DOM 元素不会导致回流。痛苦的是“移除这个元素。容器有多大?移除这个。它现在有多大?好的,也移除这个。现在怎么办?”
-
重点是,如果一次移除多个元素,如果浏览器可以避免除最后一次回流之外的所有元素,那么最终可能只会得到一次回流。
-
我很确定这应该不是问题。看看浏览器能以多快的速度创建 1000 个 div,让它们不可见,然后再让它们可见:jsfiddle.net/howderek/aDzgc
标签: javascript html css repaint reflow