我有一个关于回流性能的问题。
考虑到这个 HTML:
<html>
<head>
...
</head>
<body>
all HTML soup here
...
<div class="widget-one" id="widget-one">
...
</div>
<div class="widget-two" id="widget-two">
...
</div>
<div class="widget-three" id="widget-three">
...
</div>
<nav>
<a class="widget-one-anchor" href="#widget-one">widget one</a>
<a class="widget-two-anchor" href="#widget-two">widget two</a>
<a class="widget-three-anchor" href="#widget-three">widget three</a>
</nav>
</body>
</html>
每 5 分钟发出一次 XHR 请求,并显示我必须显示或隐藏的“小部件 + 锚”。
例如,如果我必须隐藏“widget-two”,我还必须隐藏“widget-two-anchor”。这适用于每个小部件 + 关联锚点或任何其他关联 DOM 元素。
我目前有两种选择来实现这一点(如果您有更好的解决方案,我将不胜感激)。
使用 JavaScript:对于每个“小部件”:隐藏或显示它并隐藏或显示 associates-widget DOM 元素(在本例中为锚点)。
使用 JavaScript 和 CSS: 在元素上添加一个类
<body>
,例如“hide-widget-two”,它通过 CSS 依赖隐藏小部件和所有 associates-widget DOM 元素(在本例中为锚点)。
例如 :
.hide-widget-two .widget-two,
.hide-widget-two .widget-two-anchor {
display:none;
}
我选择了第二个,因为它的可维护性:用 CSS 比用 JavaScript 更容易隐藏或显示许多元素。如果明天我必须添加另一个关联小部件 DOM 元素,我只需要更新我的 CSS 文件。
因为我在这篇文章中看到最小化浏览器重排,更改 DOM 树中的一个级别会导致树的每个级别都发生变化,那么哪个选择更好?
切换正文上的类并可能导致整个页面重排?或者在每个项目上切换样式显示并导致该项目的每个 DOM 树子项的重排?