2010-12-10 42 views
4

我有一個非常大的產品目錄,我試圖一次加載10個項目的「頁面」。如何在後臺加載AJAX數據,而不會影響性能?

現在,如果用戶打開我的目錄,並花30秒瀏覽第一個「頁面」,我想讓我的應用程序繼續從服務器加載數據 - 這樣,當用戶轉到其他頁面時,賠率它的數據已經被加載到他們的瀏覽器了。

我已經成功地通過遞歸Ajax.Request來做到這一點,即在加載頁面後加載下一頁。

Controller.prototype.loadVarieties = function(varietyNames){ 
    //Loads varieties from the catalog, checks if more varieties need to be loaded, and keeps loaded them. 
    new Ajax.Request("../GetVarieties.php", { 
       method: 'get', 
       parameters: {'varietyNames': varietyNames.toJSON()}, 
       onSuccess: function (response) { 
        this.model.parseCatalog(response.responseText); 
        var varietyNames = this.model.getVarietiesToLoad(); 
        if(varietyNames.length != 0){ 
         this.loadVarieties(varietyNames); 
        } 
       }.bind(this) 
      }); 
} 

不幸的是,這是造成性能問題 - 瀏覽器響應用戶輸入非常slugglishly直到整個目錄加載。 (在這一點上,我可能要麼加載整個目錄,要麼不做後臺加載)。

我能做些什麼來實現數據的低優先級後臺加載?它甚至有可能嗎?我應該放棄,只是做懶加載?

+0

我想我會延期加載。例如:當用戶點擊頁面N時,加載頁面N和頁面(N + 1 ... N + 3)。這會給人們無滯後的經驗和快速的響應時間。 – bezmax 2010-12-10 13:37:56

回答

5

問題不在於Ajax調用,應該不會掛斷用戶。問題出現在您處理該數據時。大型循環和許多寫入DOM的操作會導致瀏覽器緩慢。較小的循環,使用setTimeout for循環以及一次寫入DOM將使其更具響應性。

沒有看到處理代碼,這是儘可能多的幫助,因爲我可以給。

+0

處理代碼確實是瓶頸 - 我忘記了AJAX的異步特性。解析不是問題,但建立DOM是。感謝您指出應該顯而易見的內容! – Vladislav 2010-12-10 14:00:54

相關問題