zoukankan      html  css  js  c++  java
  • 动态创建大量 html dom 元素时提升性能

    考虑以下两种做法:
    方法1
    <html>
        <head>
            <script>
            function createElements()
            {
                var t1 = new Date();
                for(var i = 0; i < 10000; i++)
                {
                    var oP = document.createElement("p");
                    oP.innerText 
    = "hello world";
                    document.all(
    "div1").appendChild(oP);
                }
                var t2 = new Date();
                document.all("div2").innerText = "time span is:" + (t2 
    - t1) + "ms";
            }
            </script>
        </head>
        <body onload="createElements()">
            <div id="div1" />
            <div id="div2" />
        </body>
    </html>

    输出结果:
    time span is:6718ms

    方法2
    <html>
        <head>
            <script>
            function createElements()
            {
                var t1 = new Date();
                var oFragment = document.createDocumentFragment();
                for(var i = 0; i < 10000; i++)
                {
                    var oP = document.createElement("p");
                    oP.innerText 
    = "hello world";
                    oFragment.appendChild(oP);
                
    }
                document.all("div1").appendChild(oFragment);
                var t2 = new Date();
                document.all("div2").innerText = "time span is:" + (t2 
    - t1) + "ms";
            }
            </script>
        </head>
        <body onload="createElements()">
            <div id="div1" />
            <div id="div2" />
        </body>
    </html>

    输出结果:
    time span is:1344ms

    将新创建的元素临时 append 到一个 document fragment 对象上,全部创建完成之后再将此 document fragment 对象 apped 到 document 上,这样的话只是在 append document fragment 的时候刷新一次 dom,而不使用 document  fragment 对象在每次 append 的时候都会刷新 dom。因此方法二比方法一的性能得到了显著的提升!
  • 相关阅读:
    CentOS7.4 + Ambari 2.6.1.5 + HDP 2.6.4.0 安装部署
    分布式业务的异常解决思路
    RPC簡介
    网络I/O模型--07Netty基础
    网络I/O模型--06异步I/O
    网络I/O模型--05多路复用I/O
    网络I/O模型--04非阻塞模式(解除accept()、 read()方法阻塞)的基础上加入多线程技术
    网络I/O模型--03非阻塞模式(ServerSocket与Socket的超时处理)--解除accept()、 read()方法阻塞
    网络I/O模型--02阻塞模式(多线程)
    Android开发(五)——计时器
  • 原文地址:https://www.cnblogs.com/focus/p/1083932.html
Copyright © 2011-2022 走看看