0

高スループットの問題に取り組んでいます。私の目標は、少なくとも chrome ブラウザーで、1M の行で構成されるグリッドを表示することです。

これらの行は、同じマシンで実行されている Python サーバーから動的にフェッチされます。このサーバーは、データセット全体を既にメモリにロードしています。クライアント (ブラウザー) とサーバー (python) 間の通信は、websocket を介して行われます。グリッドにはオプションがありますvirtualPaging: true

これまでのところ、それぞれ 100 行のページを読み込んで、いくつかの良好なパフォーマンスに達しています。それにもかかわらず、最初に 1M データセット全体をロードすると (したがって、行のリモートフェッチなしで)、スクロールが大幅に改善されます (「白い行」効果はありません)。

データセット全体をブラウザーのメモリに保存せずに、同じパフォーマンスを実現したいと考えています。

私が試みる最初のステップは、いくつかの変換ステップを避けることです。クライアントはサーバーから配列の配列を受け取ります。これは、サーバー上の行モデルが「位置指定」であることを意味します (r一般的な行として指定され、r[0]最初の列、2 番目の列などに関連する要素r[1]です)。しかし、successCallbackag-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");

どんな助けでも大歓迎です

4

1 に答える 1

0

これはどうですか ?

pageSize を 100 などに修正します。

サーバー側のページングを使用しているため、独自のデータソースを実装しています。したがって、データをロードするように求められたら、10000 行などをロード [および変換] してメモリに保存します。

次に、独自の中間ページングを使用します。グリッドが次の行を要求するたびに、メモリからそれらを取得するか、次の 10k 行をフェッチして [変換して] 最初の 100 番目のみを返します。

[convert] 部分は、サーバーからロードするとき、または次の 100 行を要求するときに変換操作を配置するための選択です。

データの数が膨大で、これをローカル コンピューターだけでなく展開することを検討している場合、angular (またはブラウザー、どこにあるかはわかりません) は gzip 圧縮データを透過的にサポートします。

于 2016-02-08T12:24:20.113 に答える