我想知道 1.) 10,000 个可见的 tablerow 2.) 10,000 个使用 display:none 隐藏的 tablerow 之间是否有区别
我想知道的是。如果页面上所有 10,000 行都可见,是否会导致页面滚动滞后?
但如果我隐藏例如其中的 9000 个。这可以减少滞后吗?多谢你们。
我想知道 1.) 10,000 个可见的 tablerow 2.) 10,000 个使用 display:none 隐藏的 tablerow 之间是否有区别
我想知道的是。如果页面上所有 10,000 行都可见,是否会导致页面滚动滞后?
但如果我隐藏例如其中的 9000 个。这可以减少滞后吗?多谢你们。
一般来说display: none;
会省去浏览器一些工作。
浏览器将首先解析您的 HTML 并构建所谓的 DOM(文档对象模型),当收到所有 CSS 后,它将继续构建 CSSOM(CSS 对象模型)。这两者结合将给出渲染树。
有了渲染树,浏览器将执行布局步骤(决定每个元素在屏幕上的位置以及它将有多大),然后在屏幕上绘制页面。
然而,当结合 DOM 和 CSSOM 成为渲染树时,浏览器将丢弃所有的子树,display: none;
因此在布局和绘制步骤中要做的工作更少。
刚遇到这个问题,也想投入我的 2 美分
好问题!它不是太宽泛,讨论得还不够。我正在根据我遇到的延迟加载问题和交叉引用其他网站(如 Twitter 和 Reddit 提要)对此进行研究。
Lighthouse 使用 DOM 树标记页面:
例如,我看到 Reddit 的分数令人沮丧26。
“避免使用过多的 DOM 大小 1,456 个元素”作为推荐操作。
Reddit.com:灯塔 说:
大 DOM 会增加内存使用,导致更长的样式计算,并产生代价高昂的布局重排。学到更多。React 考虑使用“窗口”库
react-window
,如果您在页面上呈现许多重复元素,则可以最大限度地减少创建的 DOM 节点的数量。学到更多。此外,使用 shouldComponentUpdate、PureComponent 或 React.memo 尽量减少不必要的重新渲染,如果您使用 Effect 挂钩来提高运行时性能,则仅在某些依赖项发生更改之前才跳过效果。