2016-03-01 65 views
2

我是新來ReactJS和Django的REST框架(DRF)ReactJS裝載狀態數據,優化技術

def MyModel(model): 
    ... 
    status = ChoiceField(['new', 'in progress', 'completed'...]) 

使用它在我的應用程序,我會爲每個單獨的國家部分。所以數據需要分離。 我的問題是有很多不同的狀態,約6或7.

所以我使用不同的路線爲每個狀態。 /新/ INPROGRESS等,但每一次,而不是僅僅1

loadMymodelsFromServer: function() { 
    this.loadNewMymodelsFromServer(); 
    this.loadAssignedMymodelsFromServer(); 
    this.loadAllocatedMymodelsFromServer(); 
    this.loadDraftMymodelsFromServer(); 
    this.loadPublishedMymodelsFromServer(); 
    this.loadArchivedMymodelsFromServer() 
    this.loadSponsoredMymodelsFromServer(); 
    this.loadCurrentUserMymodelsFromServer(); 
}, 

loadNewMymodelsFromServer: function() { 
    var url = this.props.url + "/new/"; 
    $.ajax({ 
     url: url, 
     dataType: 'json', 
     cache: false, 
     success: (function (data) { 
      this.setState({ new_mymodels: data }); 
     }).bind(this), 
     error: (function (xhr, status, err) { 
      console.error(url, status, err.toString()); 
     }).bind(this) 
    }); 
}, 

數據這造成約7的請求已經被刷新了幾次,對之類的東西刪除操作和更新操作,如JS數組不支持這些操作。

將一個巨大的請求中未排序的所有數據加載到JS for循環中會更好嗎?

感覺不對,因爲我知道數據庫已經過優化來查詢像這樣的參數,而不是Javascript,所以我做錯了什麼?

+0

「JS陣列不支持這些操作。」 - 它將幾乎總是被_faster_拼接一個JS數組並且在原地進行更新(通常以_micro_seconds爲單位進行測量),而不是進行網絡調用以重新獲取數據(通常以10或100的_milli_seconds爲單位)。 – Brandon

+0

這是真的,但無論如何,這個系統使用輪詢實時更新 它最終將使用套接字,但無論哪種方式仍然需要網絡調用 – straykiwi

+0

任何原因,你不只有一個Ajax調用運行所有查詢並返回一個包含所有結果的對象,因此您只需進行一次調用而不是7次? – Brandon

回答

1

而不是有7個人的ajax調用,你可以做一個單一的ajax調用,將所有7個結果作爲單個對象返回。

新的ajax調用服務器處理程序可以調用其他7個查詢並將結果收集到一個對象中。

下面是用於服務器的一些僞代碼:

function megaQueryHandler() { 
    var result = { 
     query1Data: query1Handler(), 
     query2Data: query2Handler(), 
     ... 
    }; 

    return result; 
} 

那麼你的客戶端可以只讓一個調用這個「超級查詢」。