我有段JavaScript代码如下:var DATA = [
  ["00002","9900","","","2009-11-23 17:51:52","0001","0002","+1.5","","","","","","",""],
  ["00003","9900","","","2009-11-23 17:52:15","0001","0002","-1","","","","","","","0"],
  ["00004","9900","","","2009-11-23 17:53:02","0001","0002","-1","","","","","","","0"],
  ["00005","9900","","","2009-11-23 17:52:52","0001","0002","-1","","","","","","","0"],
  ["00006","9900","","","2009-11-23 17:52:52","0001","0002","-1","","","","","","","0"],
  ["00007","9900","","","2009-11-23 17:52:52","0001","0002","-1","","","","","","","0"],
  ["00008","9900","","","2009-11-23 17:52:52","0001","0002","-1","","","","","","","0"],
  //...后面还有很多,一共有5000多条
];
var strB = '';
function test(){
for(var i=0,len=DATA.length;i<len;i++) {
strB += '\r\n';
}
}
var t1=Date.parse(new Date()) + new Date().getMilliseconds();
test();
var t2=Date.parse(new Date()) + new Date().getMilliseconds();
alert(t2-t1);这样一段函数在IE下的执行下要几秒钟,而FF、Chrome下只要几毫秒
如果我把上面那个数组给注释掉,再在IE下执行,也只需要几毫秒难道前面的大数组会影响后面的函数的执行??我函数里根本就没有用到这个大数组啊请高手告诉一下原因,以及在IE下如何改进

解决方案 »

  1.   

    CPU P4 2.66G 需要6秒左右
      

  2.   

    当然会用了,不过不在那个test里用
      

  3.   

    本来IE这方面就没有FF做的好,如果量再大点,弄个2万条,可能会内存报错,你试试?
      

  4.   

    你拿这个数组的长度进行循环了,还说没用到数据量大的时候不要用字符串拼接的方式,用数组代替,可以这样:
    var strB = []; 
    function test(){ 
    var len=DATA.length;
    var i=0;
    for(;i <len;i++) { 
    strB[strB.length] = '\r\n'; 


    var t1=Date.parse(new Date()) + new Date().getMilliseconds(); 
    test(); 
    var t2=Date.parse(new Date()) + new Date().getMilliseconds(); 
    alert(t2-t1);
    alert(strB.length);//数组长度
    strB.join("");//转字符串
      

  5.   

    大数组会影响后面的函数执行时间,以下可以尝试看看.........
    修改方案:var strB = new Array();
    function test(){
        var dataLen = DATA.length;
        for(var i = 0,i < dataLen; i++) { 
            strB.push("\r\n");
        } 
    }
      

  6.   

    已经测试过了,时间都浪费在字符串拼接上!!!改成 Array 能提高两个数量级,可是还没有 ff 快,
    可见 IE 的大字符串拼接存在严重的效率问题!L@_@K
    var strB = new Array();
    function test(){
    for(var i=0,len=DATA.length; i<len; i++) {
    strB.push("\r\n");
    }
    }
      

  7.   

    长度影响循环次数,循环次数影响执行时间LZ可以把DATA.length直接换成5000,把数组去掉看看,还是一样的慢
      

  8.   

    如果把数组去掉,DATA.length改成5000,只需要几毫秒
      

  9.   


    for(;i <len;i++) {
       //直接用i,不是更省事
       strB[i] = '\r\n';
    }
    }
      

  10.   

    其实 lz 只要分段计时就能知道时间到底消耗在哪里了!IE 解释数组只用几毫秒,时间主要消耗在【字符串拼接】上,
    记得 IE 会把字符串作为字符数组处理,即 CharArray,每次拼接后产生一个新的 String 实例。
      

  11.   

    经过测试,这个地方主要是由于DATA数组占用大量的内存导致,可以在获取完数组长度后释放内存:
    var len=DATA.length;
    DATA = null;
    for(var i=0;i <len;i++) { 
    strB += '\r\n'; 
    }当然最好还是不要使用字符串拼接的方式