如何在JavaScript中處理大量資料

來源:互聯網
上載者:User

BKJIA推薦專題:JavaScript學習筆記 有問有答

在幾年之前,開發人員不會去考慮在服務端之外處理大量的資料。現在這種觀念已經改變了,很多Ajax程式需要在用戶端和伺服器端傳輸大量的資料。此外,更新DOM節點的處理在瀏覽器端來看也是一個很耗時的工作。而且,需要對這些資訊進行分析處理的時候也很可能導致程式無響應,瀏覽器拋出錯誤。

將需要大量處理資料的過程分割成很多小段,然後通過JavaScript的計時器來分別執行,就可以防止瀏覽器假死。先看看怎麼開始:

 
  1. function ProcessArray(data,handler,callback){  

ProcessArray()方法支援三個參數:

◆data:需要處理的資料

◆handler:處理每條資料的函數

◆callback:回呼函數

然後定義一些變數:

 
  1. var maxtime = 100;  
  2. var delay = 20;  
  3. var queue = data.concat(); 

maxtime表示每個處理進程的最大毫秒數。delay表示每個程式塊之間的毫秒數。queue是來源資料的複製,雖然不是在所有情景下都必要,但是我們是通過傳遞引用修改的,所以最好還是備份一下。

然後就可以使用setTimeout()方法來處理了:

 
  1. setTimeout(function(){  
  2.      var endtime = new Date()  + maxtime;  
  3.      do{  
  4.           hanler(queue.shift());  
  5.      }while(queue.length>0 && endtime > new Date()); 

首先,先計算endtime,這是程式處理的最大時間。do.while 迴圈用來處理每一個小塊的資料,直到迴圈全部完成或者逾時。

為什麼使用do..while迴圈呢?

JavaScript支援while和do…while迴圈。不同之處在於do..while迴圈回至少執行一次。如果使用while迴圈,那麼當開發人員設定一個很小或者很低的endtime值的時候,那麼處理就根本不會執行了。

最後,我們再決定是否需要處理其他的資料,如果需要,那麼就再調用一次:

 
  1.  if (queue.length > 0) {  
  2.     setTimeout(arguments.callee, delay);  
  3.   }  
  4.   else {  
  5.     if (callback) callback();  
  6.   }  
  7. }, delay);  

這樣回呼函數會在每一個資料都處理結束的時候執行。我們可以通過ProcessArray()來測試一小組資料:

 
  1. // process an individual data item  
  2. function Process(dataitem) {  
  3.   console.log(dataitem);  
  4. }  
  5. // processing is complete  
  6. function Done() {  
  7.   console.log("Done");  
  8. }  
  9. // test data  
  10. var data = [];  
  11. for (var i = 0; i < 500; i++) data[i] = i;  
  12. // process all items  
  13. ProcessArray(data, Process, Done); 

這個方法在任何瀏覽器中都可以執行,不過HTML 5提供了更好的辦法,可參考專題:HTML 5 下一代Web開發標準詳解

原文連結:http://rockux.com

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.