zoukankan      html  css  js  c++  java
  • 计失败的一次js优化

    最近几天要做一次产品的批量修改,前端展示一个产品列表,大概有500条数据,然后通过修改产品某一属性进行批量修改,譬如长,宽,高

    第一次效果最差

    <table id="table1"><tr><td><input type="hidden" name="hidLen" value=""/><input type="hidden" name="hidWid" value=""/><input type="hidden" name="hidHei" value=""/></td></tr></table>
    <script>
    var tableObj = docuement.getElementById('table1');
    var rows = tableObj.rows;
    for(var i = 0, len = rows.length; i < len; i++){
       
    var row = rows[i];
       
    var cell = row.cells[0];
       
    var hLen = cell.getElementsByName('hidLen')[0];
       
    var hWid = cell.getElementsByName('hidWid')[0];
       
    var hHei = cell.getElementsByName('hidHei')[0];
      hLen.value 
    = '10';
      hWid.value 
    = '10';
      hHei.value 
    = '10';
    }
    </script>

     第二次不用循环row 直接根据name来找,并赋值,但是走入一个误区,因为原生不支持超找某节点下的name元素,因此自己写了一个方法,以为会提高效率,结果失败,还不如直接通过document.getElementsByName ,不过FireFox下没差别,IE下才会使用原生的快一点

    <table id="table1"><tr><td><input type="hidden" name="hidLen" value=""/><input type="hidden" name="hidWid" value=""/><input type="hidden" name="hidHei" value=""/></td></tr></table>
    <script>
      
    //辅助方法,查询某节点下的Name元素
      function getNames(nName, nType, nPare){
        
    var arr = [];
        
    var eles = nPare.getElementsByTagName(nType);
        
    for(var i = 0, len = eles.length; i < len; i++){
            
    var ele = eles[i];
            
    if(ele.name == nName){
                arr.push(ele);
            }
        }
        
    return arr;
      }

    var tableObj = docuement.getElementById('table1');

    var hLens = getNames('hidLen''input', tableObj);
    var hWids = getNames('hidWid''input', tableObj);
    var hHeis = getNames('hidHei''input', tableObj);

    for(var i = 0, len = hLens.length; i < len; i++){
      hLens[i].value 
    = '10';
      hWids[i].value 
    = '10';
      hHeis[i].value 
    = '10';
    }
    //2000行数据IE下差不多200ms

    </script>

     第三次得了,不要辅助的getNames方法了,还是原生效率高啊,还以为通过查找某节点下的元素,可以避免多次查找不必要的元素,可是忘记了辅助写的方法,还要比较是否相等,效率更慢

    <table id="table1"><tr><td><input type="hidden" name="hidLen" value=""/><input type="hidden" name="hidWid" value=""/><input type="hidden" name="hidHei" value=""/></td></tr></table>
    <script>
    var hLens = document.getELementsByName('hidLen');
    var hWids = document.getELementsByName('hidWid');
    var hHeis = document.getELementsByName('hidHei');

    for(var i = 0, len = hLens.length; i < len; i++){
      hLens[i].value 
    = '10';
      hWids[i].value 
    = '10';
      hHeis[i].value 
    = '10';
    }
    </script>
    //2000行数据IE下差不多100ms
     

     第四次,想想反正只要把更改后的长宽高传给后台就行了,干脆用一个隐藏域,然后以特殊符号隔开好了

    <table id="table1"><tr><td><input type="hidden" name="hidSize" value=""/></td></tr></table>
    <script>
    var hSizes = document.getELementsByName('hidSize');
    for(var i = 0, len = hSizes.length; i < len;i++){
       hSizes[i].value 
    = '10'+'-'+'10'+'-'+10;//就是这边的连接字符串还是会慢,还有后台出来的时候还要拆分,不爽
    }
    </script>
    //2000行数据IE下差不多50ms
     

     ?为什么不整个用html拼接,然后用innerHTML,其一IE下 table不能直接使用innerHTML, 必须用前几节讲的方式来用,

    其二也是最致命的,不止尺寸这一列,还有其它很多的产品属性,所以不可能都换

     

     

  • 相关阅读:
    Zookeeper 笔记小结
    kafka-Reblance
    kafka笔记
    Dubbo笔记--
    Dubbo 成熟度策略.
    zookeeper watch笔记
    zookeeper 笔记--curator分布式锁
    zookeeper 笔记
    git原理整体理解
    VM options 以及 properties文件的一些理解
  • 原文地址:https://www.cnblogs.com/fuyun2000/p/2435484.html
Copyright © 2011-2022 走看看