Javascript 回流和重新喷漆的替代方案
我和其他人都知道,重新绘制和重新流动对于浏览器来说是非常昂贵的 我对CSS/JS替代品很感兴趣,它们可以重新绘制/Javascript 回流和重新喷漆的替代方案,javascript,html,css,repaint,reflow,Javascript,Html,Css,Repaint,Reflow,我和其他人都知道,重新绘制和重新流动对于浏览器来说是非常昂贵的 我对CSS/JS替代品很感兴趣,它们可以重新绘制/显示:无和重新流动/可见性:隐藏,对浏览器的计算要求不高 为了清楚起见,如果我错了,请纠正我,一个常见的重新流动场景是在您要切换显示的元素上设置display:none,例如,下拉菜单。重新流动意味着浏览器首先“流动”,即,将元素和下面的所有内容显示为可见内容,但随后必须重新流动所有内容,因为下拉菜单需要隐藏 评论《再流动与再粉刷》的性能冲击是否真的是人们需要关心的事情也是受欢迎的。
显示:无
和重新流动/可见性:隐藏
,对浏览器的计算要求不高
为了清楚起见,如果我错了,请纠正我,一个常见的重新流动场景是在您要切换显示的元素上设置display:none
,例如,下拉菜单。重新流动意味着浏览器首先“流动”,即,将元素和下面的所有内容显示为可见内容,但随后必须重新流动所有内容,因为下拉菜单需要隐藏
评论《再流动与再粉刷》的性能冲击是否真的是人们需要关心的事情也是受欢迎的。我认为你误解了这一说法
如果动态生成元素,请考虑这两个ScNeNiS:
也许这是一个很好的看待它的方式:
重新油漆的基本成本为100英镑。创建DOM元素并附加它需要花费1美元。如果您对7个要素采用方法1,您的成本将为(1+100)*7=707。如果你在做方法2,你的成本是:1*7+100=107。这是相当低的。这些数字只是为了举例说明。可能不止这些,但我认为这是一种很好且简单的重新绘制性能的方法。我认为你误解了这一说法
如果动态生成元素,请考虑这两个ScNeNiS:
也许这是一个很好的看待它的方式:
重新油漆的基本成本为100英镑。创建DOM元素并附加它需要花费1美元。如果您对7个要素采用方法1,您的成本将为(1+100)*7=707。如果你在做方法2,你的成本是:1*7+100=107。这是相当低的。这些数字只是为了举例说明。可能还有更多,但我认为这是一个很好的简单的方式来看待重新油漆的性能。没有简单的公式。首先,每个浏览器都有自己处理回流和重绘的方法。通常,浏览器会尽可能推迟回流,因为它们可能非常昂贵,正如您所知 一般而言,请记住,以下操作始终会触发回流:
- 通过附加、删除或移动节点来更改DOM树
- 更改CSS计算属性,例如
offsetWidth
- 使用
(或旧IE上的getComputedStyle
)读取计算的CSS值currentStyle
有关回流焊的一些乐趣,请参见没有简单的公式。首先,每个浏览器都有自己处理回流和重绘的方法。通常,浏览器会尽可能推迟回流,因为它们可能非常昂贵,正如您所知 一般而言,请记住,以下操作始终会触发回流:
- 通过附加、删除或移动节点来更改DOM树
- 更改CSS计算属性,例如
offsetWidth
- 使用
(或旧IE上的getComputedStyle
)读取计算的CSS值currentStyle
要了解回流的乐趣,请参见如果要更改显示内容,则需要回流并重新绘制至少一次。您所能做的最好的事情就是尽量减少回流次数,方法是不要在典型网页(例如,这里的Stackoverflow)上交替使用DOM更改和计算属性Reads,在开始看起来不稳定之前,想要使用的
display:none的典型上限是多少?永久隐藏的DOM元素不会导致回流。伤害的是“删除这个元素。容器有多大?删除这个。它现在有多大?好的,也删除这个。现在怎么办?”问题是,如果一次删除多个元素,如果浏览器可以避免最后一次回流之外的所有回流,那么可能只会出现一次回流。我很确定这不应该是一个问题。看看浏览器能以多快的速度创建1000个div,使它们不可见,然后使它们再次可见:如果要更改显示内容,至少需要回流并重新绘制一次。你能做的最好的事情就是尽量减少回流次数,不要在一个典型的网页(例如,这里的Stackoverflow)上交替使用DOM更改和计算属性read,在它开始看起来不稳定之前,你想要使用的display:none
的典型上限是多少?永久隐藏的DOM元素不会导致