DOM回收

作者: NowhereToRun | 来源:发表于2018-03-19 20:54 被阅读39次

DOM回收

DOM回收目的是让DOM的节点数保持在较低的数值。
概括来说,它的机制是利用那些离开视图区域的、已经创建的DOM元素,而不是新建DOM元素。
需要承认的一点是DOM节点本身并非耗能大户,但是也不是一点都不消耗性能,每一个节点都会增加一些额外的内存、布局、样式和绘制。如果一个站点的DOM节点过多,在低端设备上会发现明显的变慢,如果没有彻底卡死的话。
同样需要注意的一点是,在一个较大的DOM中每一次重新布局或重新应用样式(在节点上增加或删除样式所触发的过程)的系统开销都会比较昂贵。所以进行DOM回收意味着我们会保持DOM节点在一个比较低的数量上,进而加快上面提到的这些处理过程。

滚动锚点

我们必须要知道在viewport中的最顶部可见元素是什么。由于这个元素可能只是部分可见的,所以我们也需要存储从顶部元素到viewport顶部的偏移量。


布局

每次DOM元素的回收通常情况下都会引发整个列表的重新布局,这会直接影响我们的性能:无法达成每秒60帧的目标。为避免这一点,我们自己承担了布局的重任,使用了绝对定位的元素。这样我们可以让所有列表中的元素感觉上还在占用空间,但其实那里毛都没有。由于我们自己在操控布局,我们便可以缓存每个元素消失前的位置,在用户往回滚动时,我们能立刻从缓存中加载正确的元素。

理想情况下,条目应该只被重绘一次,那就是当它们被加到DOM时。而且应该对于列表中其它条目的增加或删除完全不受影响。这个是可能的,但是只限于现代浏览器。

极致优化

Chrome增加了CSS Containment的支持,这个特性允许开发者告诉浏览器某个元素是布局和绘制的边界。由于我们这里采用的是自己来布局,这是一个很好的可以应用 containment 的机会。当我们增加一个元素到 runaway时,我们知道其它条目不应该被这个重新布局影响。所以每个条目应该设置一个 contain: layout。我们同样也不希望影响站点的其它部分,所以列表本身也需要这样设置。

参考链接

Google infinite-scroller

相关文章

  • DOM回收

    DOM回收 DOM回收目的是让DOM的节点数保持在较低的数值。概括来说,它的机制是利用那些离开视图区域的、已经创建...

  • javascript与浏览器

    (1)IE的DOM和BOM由c++的COM实现,COM的垃圾回收机制采用引用计数,循环引用时造成内存无法释放,因此...

  • 哪些操作会造成内存泄漏?

    内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。 ①循环引用②JS闭包③DOM插入顺序

  • dom 级别和dom 事件处理

    dom级别:dom0 dom1 dom2 dom3 dom事件处理:dom0 dom2 dom3 (1级DOM标准...

  • WY-DOM编程

    DOM Document Object Model DOM Core DOM HTML DOM Style DOM...

  • DOM事件

    DOM级别与DOM事件 DOM级别:DOM0级、DOM1级、DOM2级、DOM3级DOM事件:DOM0级事件处理、...

  • DOM事件

    DOM级别与DOM事件 DOM级别:DOM0级,DOM1级,DOM2级和DOM3级DOM事件:DOM0级事件处理,...

  • js红包雨活动

    function Block( dom ){ this.dom = dom; //dom this.parentW...

  • DOM操作的分类

    DOM操作分为三个方面,即DOM Core(核心)、HTML-DOM和CSS-DOM。 DOM Core DOM ...

  • 虚拟 DOM 和 diff 算法

    虚拟 DOM(Virtual DOM) 通过 JS 对象表示 DOM 结构,虚拟DOM 是对 DOM 的抽象 通常...

网友评论

      本文标题:DOM回收

      本文链接:https://www.haomeiwen.com/subject/vucmqftx.html