2013-10-31 64 views
0

我有巨大的文件在服務器上處理。我上傳文件到服務器,然後讀取它,製作數組。現在,我需要把這些信息反饋到服務器:jQuery ajax異步鎖定瀏覽器

function getXMLFile(file){ // Single call 
    $.ajax({ 
    url: '....', 
    type: 'post', 
    dataType: 'json', 
    data: {filename: file}, 
    success: function(json){ 
     $.each(json, function(key, value){ // iterates over 50 000 items. 
     tmp.push(value); 
     i++; 
     if(i > 10000){ 
     setTimeout(function(){ 
     insert(tmp); 
     tmp = []; 
     i = 0; 
     }, 1000); 
     } 
    }); 
    } 
    }); 
} 

這裏是鎖定功能:

function insert(data){ // called from getXMLFile() @data -> array of 10 000 code entries 
    $.ajax({ 
     url: '....', // for now php function does nothing. 
     type: 'post', 
     dataType: 'json', 
     data: {codes: data}, 
     async: true // !!!! 
    }); 
    } 
}); 

正如你可以看到我有「異步:真正的」和使用setTimeout的,讓我的瀏覽器沒有被鎖定。 但它仍然鎖定...我做錯了什麼?

回答

2

您正在上傳文件到服務器,然後服務器返回大量數據。根據迭代大約50000個項目的數據,然後每10000次迭代請求一個不斷增加的數組。大數據每1秒就會發出大約5次請求。

它對您的瀏覽器的性能有影響是有意義的,我建議在服務器上工作,無論哪裏都可以工作。例如,第一次從服務器返回的數據也可以由服務器處理,而不用來自客戶端的大數據請求再次發送數據。這樣你就可以改善瀏覽器的糟糕表現。

爲了幫助您解決瀏覽器內存消耗的問題,並嘗試使用小型數據集。如果您的瀏覽器沒有鎖定,那麼您會知道您嘗試在客戶端處理的數據太多。