我正在處理高吞吐量問題。 我的目標是至少在Chrome瀏覽器上顯示由1M行組成的網格。如何將「原始」行數據加載到ag網格中
這些行是從運行在同一臺機器上的python服務器動態獲取的。該服務器已經將整個數據集加載到內存中。 客戶端(瀏覽器)和服務器(python)之間的通信通過websocket進行。網格有選項virtualPaging: true
。
到目前爲止,我達到了一些好的表現,每個頁面加載100行。 儘管如此,在開始時加載整個1M數據集(因此不需要遠程獲取行),顯示了滾動的顯着改進(無「白色行」效果)。
我想在不將任何數據集存儲在瀏覽器內存的情況下實現相同的性能。
我會嘗試的第一步是避免一些轉換步驟。 客戶端從服務器接收數組陣列,這意味着服務器上的行模型是「位置」(給定r
作爲通用行,r[0]
是與第一列相關的元素,r[1]
到第二列等) 。但回調函數AG-網格successCallback
,要求對象的數組,這意味着,每行需要與它相關的列名(給定r
作爲一個通用的行密鑰,r["firstColumn"]
是r["secondColumn"]
與第一列中的元件,給第二等等)。
鑑於鍵值機制使用的內存大量浪費,第二種方法對於服務器角度來說是完全不可行的。 這導致了客戶端收到的每一頁需要一個本地的轉換:
client.appendCallback("message", function(message){
message = JSON.parse(message.data);
switch(message.command) {
case "GetRows":
if(message.res.code == 0) {
var bulk = [];
var arr = message.res.data;
for (var i = 0, len = arr.length; i < len; i++) {
bulk[i] = {"par1" : arr[i][0], "par2" : arr[i][1], "par3" : arr[i][2], "par4" : arr[i][3], "par5" : arr[i][4], "par6" : arr[i][5]};
}
_data.successCallback(bulk);
}
break;
default:
break;
}
},"ws");
我需要的是一種方式傳遞給successCallback行的陣列,而不是爲避免轉換部分,像這樣的對象:
client.appendCallback("message", function(message){
message = JSON.parse(message.data);
switch(message.command) {
case "GetRows":
if(message.res.code == 0) {
_data.successCallback(message.res.data);
}
break;
default:
break;
}
},"ws");
任何幫助將不勝感激
我明白了你的觀點。但通過這種方式,我仍然在客戶端和服務器之間複製了10k行(在內存中)。此外,在一個小視圖上的滾動動作(例如顯示20行的網格)需要頻繁地讀取10k行。第一個問題增加到10萬。 –
@ pedro.zena如果你想避免很多轉換的東西,你可以使用valueGetter。 https://www.ag-grid.com/angular-grid-value-getters/index.php。因此,對於第一列,您可以定義:valueGetter:function(params){return params.data [0]}。對於第二次你會返回params.data [1],.... – Walfrat