高スループットの問題に取り組んでいます。私の目標は、少なくとも chrome ブラウザーで、1M の行で構成されるグリッドを表示することです。
これらの行は、同じマシンで実行されている Python サーバーから動的にフェッチされます。このサーバーは、データセット全体を既にメモリにロードしています。クライアント (ブラウザー) とサーバー (python) 間の通信は、websocket を介して行われます。グリッドにはオプションがありますvirtualPaging: true
。
これまでのところ、それぞれ 100 行のページを読み込んで、いくつかの良好なパフォーマンスに達しています。それにもかかわらず、最初に 1M データセット全体をロードすると (したがって、行のリモートフェッチなしで)、スクロールが大幅に改善されます (「白い行」効果はありません)。
データセット全体をブラウザーのメモリに保存せずに、同じパフォーマンスを実現したいと考えています。
私が試みる最初のステップは、いくつかの変換ステップを避けることです。クライアントはサーバーから配列の配列を受け取ります。これは、サーバー上の行モデルが「位置指定」であることを意味します (r
一般的な行として指定され、r[0]
最初の列、2 番目の列などに関連する要素r[1]
です)。しかし、successCallback
ag-grid のコールバック関数は、オブジェクトの配列を必要とします。つまり、各行は、列名に関連するキーを受け取ります (r
一般的な行として与えられr["firstColumn"]
、最初の列に関連する要素r["secondColumn"]
、2 番目の列に関連する要素など) )。
2 番目のアプローチは、キーと値のメカニズムによって大量のメモリが浪費されるため、サーバーの観点からは完全に実行不可能です。これにより、クライアントが受信したページごとにローカル変換が必要になります。
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");
どんな助けでも大歓迎です