zoukankan      html  css  js  c++  java
  • javascript对Dom操作中table添加行性能问题

         

    在做一个js控件的时候,需要从后台取的数据后将内容添加到一个表格中,当数据量在1000行以上的时候,数据加载在IE下面会很慢,代码如下:

    页面代码:

     <table class="bb"></table>

    js代码

      $("#Button1").click(function () {
                    $.post("http://localhost:49017/table/a.ashx", {}, function (data) {
                        var a = new Array();
                        var k = 0;
                        var t1 = new Date().getTime();
                        for (var d in data) {
                            a.push("<tr>");
                            a.push("<td>" + data[d]["id"] + "</td>");
                            a.push("<td>" + data[d]["sn"] + "</td>");
                            a.push("<td>" + data[d]["title"] + "</td>");
                            a.push("<td>" + data[d]["size"] + "</td>");
                            a.push("<td>" + data[d]["os"] + "</td>");
                            a.push("<td>" + data[d]["charge"] + "</td>");
                            a.push("<td>" + data[d]["price"] + "</td>");
    
                            a.push("</tr>");
                        }
    
                        var t2 = new Date().getTime();
                        var sss = a.join('');
                        var t3 = new Date().getTime();
                        $(".bb").html(sss);
                        var t4 = new Date().getTime();
                        alert("拼接数据时间为:" + (t2 - t1) + "毫秒,转换数据时间为:" + (t3 - t2) + "毫秒,加载" + (t4 - t3));
    
                    }, "json");
    
                });

    在IE8下返回的测试数据如下:

    1000条:image

    5000条:image

    10000条:image

    在chrome下面返回的测试数据如下 :

    1000:image

    5000:image

    10000:image

    当数据越来越多的时候  $(".bb").html(sss);ie下面这段代码执行的时间越来越长  ,而其他的时间都是在可以接受的范围。当中间的数据太多的时候,执行效率完全无法接受 。

    对操作只做一个小小的调整,把table拼出来后加载到div中。代码如下 :

     <div class="aa">
        </div>


    js代码如下 

        $("#Button2").click(function () {
                    $.post("http://localhost:49017/table/a.ashx", {}, function (data) {
                        var a = new Array();
                        var k = 0;
                        var t1 = new Date().getTime();
                        a.push("<table>");
                        for (var d in data) {
                            a.push("<tr>");
                            a.push("<td>" + data[d]["id"] + "</td>");
                            a.push("<td>" + data[d]["sn"] + "</td>");
                            a.push("<td>" + data[d]["title"] + "</td>");
                            a.push("<td>" + data[d]["size"] + "</td>");
                            a.push("<td>" + data[d]["os"] + "</td>");
                            a.push("<td>" + data[d]["charge"] + "</td>");
                            a.push("<td>" + data[d]["price"] + "</td>"); 
                            a.push("</tr>");
                        }
                        a.push("</table>");
                        var t2 = new Date().getTime();
                        var sss = a.join('');
                        var t3 = new Date().getTime();
                        $(".aa").html(sss);
                        var t4 = new Date().getTime();
                        alert("拼接数据时间为:" + (t2 - t1) + "毫秒,转换数据时间为:" + (t3 - t2) + "毫秒,加载" + (t4 - t3));
    
                    }, "json");
    
                });

    在IE8下返回的测试数据如下:

    1000条:image

    5000条:image

    10000条:image

    在chrome下面返回的测试数据如下 :

    1000:image

    5000:image

    10000:image

    对比上面的测试数据  chrome变化不大,方法一的执行效率还要高一点  ,在ie下面就是大幅度的提升效率了。将加载时间降低了10倍以上。

    总结:

          在ie下面对table加载tr td对象应该是引起了某种操作,导致效率低。而将table加到div上就不会引起这种操作 。在js操作dom对象的时候,需要尽量减少对dom的操作 。

         推荐一篇关于dom操作的文章: 提升JavaScript运行速度之DOM篇

  • 相关阅读:
    mybatis框架查询用户表中的记录数
    文件的上传和下载
    怎样在一条sql语句中将第一列和第二列加和的值作为第三列的值
    [OS] 进程的虚地址空间
    [网络] TCP/IP协议族各层的协议汇总
    [面试] C++ 虚函数表解析
    [OS] 堆栈、堆、数据段、代码段
    [算法] 并查集概念及其实现
    [OS] 我与大牛的对话!
    [C] int *p[4]与int (*q)[4]的区别
  • 原文地址:https://www.cnblogs.com/ac1985482/p/2990282.html
Copyright © 2011-2022 走看看