2014-10-02 42 views
0

我使用Slickgrid在html网站上显示数据。用户可以选择一个表格和列。Javascript Slickgrid超时

该代码运行良好,但一个表包含大约30列和大约500000行。现在脚本花费太长时间,我得到一个Firefox的JavaScript超时。

我知道,我可以使用setTimeout(),但我不知道如何使用这个功能。 我该怎么做,以避免JavaScript超时?

function addRow(){ 
     for (var i=0;i<arrayRow.length;i++){ 
     var row ='{"id": "' + i + '", '; 
     for (var j=0;j>arrayColumn.length;j++){ 
      row = row + '"' + arrayColumn[j] + '" : "' + array[j]+[i] + '",' 
     } 
     row = row.substr(0,row.length-1); 
     row = row + '}'; 
     data[i]=JSON.parse(row); 
     } 
     if (i==arrayRow.length){ 
     dataView.setItems(data); 
     } 
    } 

EDIT1:我已经更新了我的代码,但现在我得到的错误“太多递归”。

i=0; 
    function addRow(){ 
     if (i<arrayRow.length){ 
     var row ='{"id": "' + i + '", '; 
     for (var j=0;j>arrayColumn.length;j++){ 
      row = row + '"' + arrayColumn[j] + '" : "' + array[j]+[i] + '",' 
     } 
     row = row.substr(0,row.length-1); 
     row = row + '}'; 
     data[i]=JSON.parse(row); 
     i++; 
     if(i%100000==0){ 
      setTimeout(addRow,0); 
     } else { 
      addRow(); 
     } 
     } 
     if (i==arrayRow.length){ 
     dataView.setItems(data); 
     } 
    } 
+0

可能重复( http://stackoverflow.com/questions/672732/prevent-long-running-javascript-from-locking-up-browser) – 2014-10-02 11:10:07

回答

0

脚本执行超时测量执行一个方法的时间。 你需要将“for”循环分成几个循环。例如,你可以使增加10万行的方法,用setTimeout调用5次

也许这应该是类似的东西:中[防止长时间抱死浏览器中运行的JavaScript]

var iFirstRow = 0; 
funtion AddRows(_iFirstRow, _nRowsToAdd) 
{ 
    ..implementation of adding nRows 
    iFirstRow = iFirstRow + nRowsToAdd; 

    if (There is rows to add) 
    { 
     Call AddRows via timeout 
    } 
    else 
    { 
     ..its ready 
    } 
}