• document.createDocumentFragment 以及创建节点速度比较


    document.createDocumentFragment

    document.createDocumentFragment()方法创建一个新空白的DocumentFragment对象。

    DocumentFragments是DOM节点。它们不是主DOM树的一部分。通常的用例是创建文档片段,将元素附加到文档片段,然后将文档片段附加到DOM树。在DOM树中,文档片段被其所有的子元素代替。

    因为文档片段存在于内存中,并不在DOM树中,所以将子元素插入到文档片段时不会引起页面回流(reflow)(对元素位置和几何上的计算)。因此,使用文档片段document fragments 通常会起到优化性能的作用。

    比如下面这个示例,给一个ul添加10000个li,先用拼接字符串的方式来实现:

    let start = Date.now()
    let str = ''
    let newUlEle = document.createElement('ul')
     
    document.body.appendChild(newUlEle)
     
    for (let i = 0; i < 10000; i++) {
        str += '<li>第' + i + '个子节点</li>'
    }
     
    newUlEle.innerHTML = str
     
    console.log('耗时' + (Date.now() - start) + 'ms');

    多次刷新,可以看到创建10000li时,渲染所需要的时间如下图:

    把上面的示例,换成append()的方式,逐个添加对应的li

    let start = Date.now()
    let str = ''
    let newUlEle = document.createElement('ul')
     
    document.body.appendChild(newUlEle)
     
    for (let i = 0; i < 10000; i++) {
        let liEle = document.createElement('li')
     
        liEle.textContent = '第' + i + '个子节点'
        newUlEle.appendChild(liEle)
    }
     
    console.log('耗时:' + (Date.now() - start) + 'ms')

    这种方法所费时间如下图:

    都说第二种方法要比第一种方法耗时,看上去有点像。接下来再来看createDocumentFragment的方法。可以预见的是,这种方法肯定比第二种强,但应该没有第一种快:

    let start = Date.now()
    let str = ''
    let newUlEle = document.createElement('ul')
     
    document.body.appendChild(newUlEle)
     
    let fragment = document.createDocumentFragment()
     
    for (let i = 0; i < 10000; i++) {
        let liEle = document.createElement('li')
     
        liEle.textContent = '第' + i + '个子节点'
        fragment.appendChild(liEle)
    }
     
    newUlEle.appendChild(fragment)
     
    console.log('耗时:' + (Date.now() - start) + 'ms')

    转自:https://blog.csdn.net/yusirxiaer/article/details/80169070

  • 相关阅读:
    SPSS Clementine 数据挖掘入门 (2)
    Oracle与SQL Server数据库管理对比
    在SharePoint中修改AD用户密码的WebPart
    【html】html 特殊字符大全
    【javascript】csshover 解决 ie6 下 hover 兼容问题
    【css】纯 css 制作带三角的边框
    【javascript】无缝滚动——上下
    【css】利用小数解析差异解决浏览器兼容性问题
    【javascript】checkbox——类似邮箱全选功能(完整版)
    【javascript】无缝滚动——左右
  • 原文地址:https://www.cnblogs.com/7qin/p/10639288.html
Copyright © 2020-2023  润新知