2014-05-19 54 views
0

我正在創建一個dgrid OnDemandGrid。該商店是一個dojo/store/MemoryStore,它有一個JSON數據集,接近50k條記錄。 我在我的OnDemandGrid中使用此商店。當我開始滾動時,我的腳本掛起& Chrome會拋出一個msg對話框,指出該頁面沒有響應,您是否想要殺死它?如何有效地使虛擬滾動與「OnDemandGrid」

我沒有得到如何使滾動高效和有效,沒有我的網頁死亡。 以下是網格的代碼。

request("../../data/dataInJsonFormat.json", { 
      handleAs: "json" 
     }).then(function(response) { 
      var store = new Memory({ 
       data: response 
      }); 
      var grid = new OnDemandGrid({ 
       id: "DataRecords", 
       // minRowsPerPage: 10, 
       // maxRowsPerPage: 10, 
       // bufferRows: 20, 
       // pagingMethod: "throttleDelayed", 
       keepScrollPosition: true, 
       loadingMessage: "Loading Data", 
       store: store, 
       columns: { 
        COMPNOS: "COMPNOS", 
        NatureCode: "NatureCode", 
        SHIFT: "Day" 
       } 
      }, "dataGrid"); 
      grid.startup(); 

該文檔說,OnDemandGrid將負責虛擬滾動,但它似乎正在爲此數據集崩潰。這個數據集是否太大?我需要使用另一種商店嗎?

感謝

回答

1

50,000條記錄是記錄在內存中的商店很多。儘管dgrid會在用戶滾動時懶散地呈現數據,但是每次滾動時,內存存儲都將被迫查找並複製該巨大數組中的一小片。儘管50k記錄不會使Chrome掛起,但確實會使每個查詢明顯變慢。

此外,通過請求所有數據並將其存儲在內存中,您需要用戶下載所有50k記錄,而他們可能只會查看其中的1%。一般來說,內存商店最多隻能提供幾千條結果。您可能應該查看基於服務器的商店,例如dojo/store/JsonRest(假設您已經或可以構建service which behaves as it expects)或dojo-smore/QueryRead(與dojox/data/QueryReadStore類似的dojo/store實現)。這些只會向服務器發送用戶實際滾動到的記錄請求。