2016-06-10 138 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]); 
       } 

      } 
}