• 使用createDocumentFragment的渲染数据(节省性能)


    调用多次document.body.append(),每次都要刷新页面一次。效率也就大打折扣了,

    而使用document.createDocumentFragment()创建一个文档碎片,
    把所有的新结点附加在其上,然后把文档碎片的内容一次性添加到document中,

    这也就只需要一次页面刷新就可。

    下面是我做的2个实例,一个使用了createDocumentFragment,一个没有使用createDocumentFragment

    demo,以及渲染时间截图:

    感兴趣的朋友可以自己手动加点数据试试createDocumentFragment有多节省性能

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>使用createDocumentFragment</title>
    </head>
    <style type="text/css">
        *{margin:0px;padding: 0px;}
        li{list-style:none;}
        .box{width:600px;margin:10px auto;}
        .box ul li{width:578px;padding:10px;margin-bottom:10px;border:1px solid #000;
            overflow:hidden;}
        .box ul li a{color:#999;width:100%;height:30px;line-height: 30px;border-bottom: 1px dashed #ccc;color:#000;
            text-decoration: none;}
        .box ul li p{color:#ccc;line-height:1.6em;}
        #time{width:100%;color:#f00;text-align:center;font-size:18px;margin-bottom: 20px;}
    </style>
    <body>
        <div id="box" class="box">
            <ul id="target">
                
                
            </ul>
        </div>
        <div id="time"></div>
    </body>
    <script type="text/javascript" src="http://static.qiyi.com/js/common/jquery-1.7.2.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        var target=$('#target');
        var oLi=$('.box>ul>li');
        var time=$('#time');
        var oHtml='';
        var data={
            pageInfor:[
                    {
                "title":"html5",
                "desp":"万维网的核心语言、标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次重大修改(这是一项推荐标准[1] 、外语原文:W3C Recommendation、见本处参考资料原文内容:[1] )。"
                },
                
                //想象这个后边还有N条数据
    
            ]
        }
        function render(){
            var beginTime=new Date().getTime();
            var oFragment = document.createDocumentFragment();
            for(var i=0;i<data.pageInfor.length;i++){
                var oTitle=data.pageInfor[i].title;
                var oDesp=data.pageInfor[i].desp;
                var tmpl=[
                    '<a href="#">'+oTitle+'</a>',
                    '<p>'+oDesp+'</p>',
                ];
                var str=tmpl.join('');
                var oLi=$('<li></li>');
                oLi.html(str);
    
                oFragment.appendChild(oLi[0]);
            }
            target[0].appendChild(oFragment);
            var endTime=new Date().getTime();
            var differenceTime='使用createDocumentFragment的渲染数据总时长'+(endTime-beginTime)+'毫秒';
            time.html(differenceTime)
        }
        render();
    </script>
    </html>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>没有使用createDocumentFragment</title>
    </head>
    <style type="text/css">
        *{margin:0px;padding: 0px;}
        li{list-style:none;}
        .box{width:600px;margin:10px auto;}
        .box ul li{width:578px;padding:10px;margin-bottom:10px;border:1px solid #000;
            overflow:hidden;}
        .box ul li a{color:#999;width:100%;height:30px;line-height: 30px;border-bottom: 1px dashed #ccc;color:#000;
            text-decoration: none;}
        .box ul li p{color:#ccc;line-height:1.6em;}
        #time{width:100%;color:#f00;text-align:center;font-size:18px;margin-bottom: 20px;}
    </style>
    <body>
        <div id="box" class="box">
            <ul id="target">
                
                
            </ul>
        </div>
        <div id="time"></div>
    </body>
    <script type="text/javascript" src="http://static.qiyi.com/js/common/jquery-1.7.2.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        var target=$('#target');
        var oLi=$('.box>ul>li');
        var time=$('#time');
        var oHtml='';
        var data={
            pageInfor:[
                {
                "title":"html5",
                "desp":"万维网的核心语言、标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次重大修改(这是一项推荐标准[1] 、外语原文:W3C Recommendation、见本处参考资料原文内容:[1] )。"
                },
                
                //想象这个后边还有N条数据
    
            ]
        }
        function render(){
            var beginTime=new Date().getTime();
            for(var i=0;i<data.pageInfor.length;i++){
                var oTitle=data.pageInfor[i].title;
                var oDesp=data.pageInfor[i].desp;
                var tmpl=[
                '<li>',
                    '<a href="#">'+oTitle+'</a>',
                    '<p>'+oDesp+'</p>',
                '</li>'
                ];
                var str=tmpl.join('');
                oHtml+=str;
                target.html(oHtml)
            }
            var endTime=new Date().getTime();
            var differenceTime='没使用createDocumentFragment的渲染数据总时长:'+(endTime-beginTime)+'毫秒';
            time.html(differenceTime)
            
        }
        render();
    </script>
    </html>

  • 相关阅读:
    运营总监招聘-e袋洗招聘-拉勾网
    中国服饰行业十大趋势
    赢在形象力之色彩
    百度系统部 在 北京市海淀区西二旗首创空间大厦 招聘 Python-交付运维系统研发工程师
    时间规划师
    使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道
    传统线下零售商已经过时了,细分电商领域的机会仍待挖掘 | 36氪
    艺术私学----免费摄影、绘画、时尚造型课程体验_豆瓣
    艺术私学------绘画免费体验课程_豆瓣
    艺术私学------绘画免费体验课程_豆瓣
  • 原文地址:https://www.cnblogs.com/ollie-sk8/p/4213739.html
Copyright © 2020-2023  润新知