2014-10-02 41 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 
    } 
}