• 坚持“九二共识”,路才越走越宽(观沧海) 2019-06-30
  • 十堰神定河水质净化工程6月底试运营 2019-06-27
  • 网友自嘲工资拖后腿 专家:衡量个人收入需更多数据 2019-06-23
  • 人大代表网络平台-天山网 2019-06-20
  • 即使中美贸易归零,中国也不会屈服美国的大棒政策 2019-06-20
  • 百姓故事:蒋姐姐的旗袍人生 2019-06-09
  • C919首飞机组技术支持团队:和大飞机一起舞动青春 2019-06-09
  • 广西工商局多年坚持开展升国旗奏国歌仪式 2019-06-08
  • “首届中国非处方药行业品牌宣传月”活动将在北京举办 2019-06-08
  • 社会主义社会按劳分配是建立在公有制和私有制并存基础上的,共产主义社会按需分配是建立在公有制基础上的,所有制基础不同,其分配形式也就不同。所谓“共产主义... 2019-06-07
  • 3月快递业务量料同比增长30% 2019-06-07
  • 【学习时刻】华侨大学黄日涵:“一带一路”盛会开启合作发展新篇章 2019-06-06
  • 泼皮无赖风水神,尔有脸能告诉大家这个————“腐败分子是天上掉下来的吗?”————跟帖是哪一个主帖下边的跟帖? 2019-06-05
  • 候选企业:兴业银行包头分行 2019-06-04
  • 部分MacBook Pro存在硬件问题 需同时换主板和SSD 2019-06-03
  • 贵州11选5第74期:使用DocumentFragments或innerHTML取代复杂的元素注入

    2016-03-28 14:57:08来源:imooc作者:

    贵州11选5中奖查询 www.ubztu.tw DOM操作在浏览器上是要付税的。尽管性能提升是在浏览器,DOM很慢,如果你没有注意到,你可能会察觉浏览器运行非常的慢。这就是为什么减少创建集中的DOM节点以及快速注入是那么的重要了。

    DOM操作在浏览器上是要付税的。尽管性能提升是在浏览器,DOM很慢,如果你没有注意到,你可能会察觉浏览器运行非常的慢。这就是为什么减少创建集中的DOM节点以及快速注入是那么的重要了。

    现在假设我们页面中有一个<ul>元素,调用AJAX获取JSON列表,然后使用JavaScript更新元素内容。通常,程序员会这么写:

    Javascript代码

    var list = document.querySelector(‘ul‘); 
    ajaxResult.items.forEach(function(item) { 
        // 创建<li>元素 
        var li = document.createElement(‘li‘); 
        li.innerHTML = item.text; 

        // <li>元素常规操作,例如添加class,更改属性attribute,添加事件监听等 

        // 迅速将<li>元素注入父级<ul>中 
        list.apppendChild(li); 
    }); 

    上面的代码其实是一个错误的写法,将<ul>元素带着对每一个列表的DOM操作一起移植是非常慢的。如果你真的想要 使用document.createElement,并且将对象当做节点来处理,那么考虑到性能问题,你应该使用DocumentFragement。

    DocumentFragement 是一组子节点的“虚拟存储”,并且它没有父标签。在我们的例子中,将DocumentFragement想象成看不见的<ul>元素,在 DOM外,一直保管着你的子节点,直到他们被注入DOM中。那么,原来的代码就可以用DocumentFragment优化一下:

    Javascript代码

    var frag = document.createDocumentFragment(); 

    ajaxResult.items.forEach(function(item) { 
        // 创建<li>元素 
        var li = document.createElement(‘li‘); 
        li.innerHTML = item.text; 

        // <li>元素常规操作 
        // 例如添加class,更改属性attribute,添加事件监听,添加子节点等 

        // 将<li>元素添加到碎片中 
        frag.appendChild(li); 
    }); 

    // 最后将所有的列表对象通过DocumentFragment集中注入DOM 

    document.querySelector(‘ul‘).appendChild(frag); 

    为DocumentFragment追加子元素,然后再将这个DocumentFragment加到父列表中,这一系列操作仅仅是一个DOM操作,因此它比起集中注入要快很多。

    如果你不需要将列表对象当做节点来操作,更好的方法是用字符串构建HTML内容:

    Javascript代码

    var htmlStr = ‘‘; 

    ajaxResult.items.forEach(function(item) { 
        // 构建包含HTML页面内容的字符串 
        htmlStr += ‘<li>‘ + item.text + ‘</li>‘; 
    }); 

    // 通过innerHTML设定ul内容 

    document.querySelector(‘ul‘).innerHTML = htmlStr; 

    这当中也只有一个DOM操作,并且比起DocumentFragment代码量更少。在任何情况下,这两种方法都比在每一次迭代中将元素注入DOM更高效。

    关键词:

    相关阅读:

    赞助商链接:

  • 坚持“九二共识”,路才越走越宽(观沧海) 2019-06-30
  • 十堰神定河水质净化工程6月底试运营 2019-06-27
  • 网友自嘲工资拖后腿 专家:衡量个人收入需更多数据 2019-06-23
  • 人大代表网络平台-天山网 2019-06-20
  • 即使中美贸易归零,中国也不会屈服美国的大棒政策 2019-06-20
  • 百姓故事:蒋姐姐的旗袍人生 2019-06-09
  • C919首飞机组技术支持团队:和大飞机一起舞动青春 2019-06-09
  • 广西工商局多年坚持开展升国旗奏国歌仪式 2019-06-08
  • “首届中国非处方药行业品牌宣传月”活动将在北京举办 2019-06-08
  • 社会主义社会按劳分配是建立在公有制和私有制并存基础上的,共产主义社会按需分配是建立在公有制基础上的,所有制基础不同,其分配形式也就不同。所谓“共产主义... 2019-06-07
  • 3月快递业务量料同比增长30% 2019-06-07
  • 【学习时刻】华侨大学黄日涵:“一带一路”盛会开启合作发展新篇章 2019-06-06
  • 泼皮无赖风水神,尔有脸能告诉大家这个————“腐败分子是天上掉下来的吗?”————跟帖是哪一个主帖下边的跟帖? 2019-06-05
  • 候选企业:兴业银行包头分行 2019-06-04
  • 部分MacBook Pro存在硬件问题 需同时换主板和SSD 2019-06-03
  • 新疆时时彩软件 排球比分多少算赢 尼斯ⅴs斯特拉斯堡 火影忍者ol论坛 禁忌的皇权投注 新彊福彩18选7走势图 德国杜塞尔多夫国际鞋展 马德里竞技球员名单 开心消消乐援彩金 最准确的平码公式算法