• 广东省人大开展学习贯彻习近平总书记重要讲话精神专题集中学习研讨 2019-07-15
  • 改革开放40年来中国农村发展变化纪实——旧貌换新颜 2019-07-15
  • 学习有理丨着力改善环境 增创发展优势 2019-07-11
  • 带动乡亲干 各自有实招——三位农村社区党组织书记的故事 2019-07-07
  • 李沁出游暖萌喂鹿 笑靥如花欢快荡秋千 2019-07-04
  • 李丽珠:沉到基层 脚踏实地干工作 2019-07-04
  • 文房清供:皇帝笔架上的那些奇珍异巧 2019-06-30
  • 世界杯揭幕战:俄罗斯队胜沙特阿拉伯队 2019-06-30
  • 【新时代 新作为 新篇章】牢记嘱托 打赢脱贫攻坚战 2019-06-18
  • 中国的城市化人口已超过欧美,如果生产总值干不过,则城市化质量是有问题的。 2019-06-18
  • 2013第八届中国常州先进制造技术成果展示洽谈会——中国常州网专题 2019-06-15
  • 发展中国家的市场经济,一般会落入:资本市场、来料加工、吃喝玩乐消费、房地产疯涨,等经济基础不牢的“中等收入陷阱”。 2019-06-15
  • 《侏罗纪世界2》《泄密者》今日上映 2019-05-30
  • 河北遵化清东陵打响景区环境提升攻坚战 2019-05-30
  • 部分金交所变相突破合格投资人数量限制 2019-05-23
  • 排球三局两胜计分规则:使用DocumentFragments或innerHTML取代复杂的元素注入

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

    排球比分直播捷报网 www.pwgq.net 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-07-15
  • 改革开放40年来中国农村发展变化纪实——旧貌换新颜 2019-07-15
  • 学习有理丨着力改善环境 增创发展优势 2019-07-11
  • 带动乡亲干 各自有实招——三位农村社区党组织书记的故事 2019-07-07
  • 李沁出游暖萌喂鹿 笑靥如花欢快荡秋千 2019-07-04
  • 李丽珠:沉到基层 脚踏实地干工作 2019-07-04
  • 文房清供:皇帝笔架上的那些奇珍异巧 2019-06-30
  • 世界杯揭幕战:俄罗斯队胜沙特阿拉伯队 2019-06-30
  • 【新时代 新作为 新篇章】牢记嘱托 打赢脱贫攻坚战 2019-06-18
  • 中国的城市化人口已超过欧美,如果生产总值干不过,则城市化质量是有问题的。 2019-06-18
  • 2013第八届中国常州先进制造技术成果展示洽谈会——中国常州网专题 2019-06-15
  • 发展中国家的市场经济,一般会落入:资本市场、来料加工、吃喝玩乐消费、房地产疯涨,等经济基础不牢的“中等收入陷阱”。 2019-06-15
  • 《侏罗纪世界2》《泄密者》今日上映 2019-05-30
  • 河北遵化清东陵打响景区环境提升攻坚战 2019-05-30
  • 部分金交所变相突破合格投资人数量限制 2019-05-23
  • 极速时时彩那里开奖的 意甲年人 网一肖中特 香港赛马会六合彩开奖结果 十四场开奖奖金 山东十一选五出什么号 江苏快3开奖直播淘宝 搜索体彩排列三走势图 极速时时彩开奖 排列三走势图专业版带连线基本走势图 娱乐场所棋牌室的申请 体彩6+118131 天津快乐十分钟开奖走势图 河北11选5号码 江苏快三开奖结果图