2016-06-10 136 views
0

以下是我的代碼,它正在花費時間在for循環中從一個對象提取數據並填充另一個對象。有什麼辦法可以減少執行時間嗎?我嘗試了while循環,但它沒有太大的幫助。好心幫每頁如何減少JavaScript代碼的執行時間

function SetGridWithData(result) { 
    if (!result) { 
     return; 
    } 
    CtrlBillableItem_SearhedBillableItems = result 
    var boxOfJson = []; 
    var j = 100; 
    if (result.length >= 100) { 
     if (PagingLastRecNum == 0) { 

      btnPrevious.style.display = 'none'; 
      for (var i = 0; i < j; i++) { 
       boxOfJson.push(result[i]); 
      } 
     } else { 
      btnPrevious.style.display = 'inline'; 
      var intializer = (j * PagingLastRecNum) + PagingLastRecNum; 
      var limiter = intializer + 99; 
      for (var i = intializer; i < limiter; i++) { 
       boxOfJson.push(result[i]); 
      } 
     } 

    } else { 
     btnPrevious.style.display = 'none'; 
     btnNext.style.display = 'none'; 

     for (var i = 0; i < result.length; i++) { 
      boxOfJson.push(result[i]); 
     } 

    } 
} 

我想實現其做分頁,但100的數據首先它會檢查頁面沒有0,如果是則一環,如果大於0比其他案件等。

+3

你可以試試[片段](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/slice)可以一次性獲取數組的子部分,而不是推入一個新的數組中,這可能涉及數組的增長時重新分配和擴展。但我懷疑即使這100個元素會很慢。 – Rup

+1

另外,因爲你使用'我<限制器'而不是'我<=限制器'你可能想再次添加100,而不是99. – Rup

+0

對不起,我沒有得到最後的評論你能解釋我多一點任何錯誤,我的意思是它會取下一百總是正確的? – Tanmay

回答

1

你可以在你的函數開始嘗試緩存result.length(以下開頭的,如果檢查)..

function SetGridWithData(result) { 
      if (!result) { return; } 
      var resultLength = result.length; 
      CtrlBillableItem_SearhedBillableItems = result 
      var boxOfJson = []; 
      var j = 100; 
      if (resultLength >= 100) { 
       if (PagingLastRecNum == 0) { 

        btnPrevious.style.display = 'none'; 
        for (var i = 0; i < j; i++) { 
         boxOfJson.push(result[i]); 
        } 
       } 
       else { 
        btnPrevious.style.display = 'inline'; 
        var intializer = (j * PagingLastRecNum) + PagingLastRecNum; 
        var limiter = intializer + 99; 
        for (var i = intializer; i < limiter; i++) { 
         boxOfJson.push(result[i]); 
        } 
       } 

      } 
      else { 
       btnPrevious.style.display = 'none'; 
       btnNext.style.display = 'none'; 

       for (var i = 0; i < resultLength; i++) { 
        boxOfJson.push(result[i]); 
       } 

      } 
}