インターフェースを再考する
まず、クライアントで50〜10万行を表示するユーザーインターフェイスデザインは、そもそも最高のユーザーインターフェイスではない可能性があります。大量のデータをクライアントに送信し、クライアントが管理するだけでなく、一部のモバイルデバイスではおそらく実用的ではないだけでなく、特定のユーザーとのやり取りで実際に読み取る行数よりも明らかに多くの行があります。ページ。したがって、最初の順序は、ユーザーインターフェイスの設計を再考し、ある種のより需要主導型のインターフェイス(ページ、仮想スクロール、文字によるキー設定など)を作成することかもしれません。データ転送量を減らすさまざまな(そしてうまくいけばより良い)ユーザーインターフェイスデザインには、さまざまな可能性があります。どの設計が最適かは、データとユーザーが使用する可能性のあるモデルに完全に依存します。
データをチャンクで送信
そうは言っても、それだけのデータをクライアントに転送する場合は、データをチャンク(一度に行のグループ)で送信することをお勧めします。チャンクの考え方は、クライアントがデータを解析、処理、結果を表示して、次のチャンクの準備ができるように、消費可能な量のデータを1つのチャンクで送信することです。クライアントは、他のユーザーイベントを処理するためにチャンク間で利用可能なサイクルがあるため、常にアクティブな状態を維持できます。ただし、チャンクで送信すると、単一行ごとに個別のメッセージを送信するオーバーヘッドが削減されます。サーバーが圧縮を使用している場合、チャンクは圧縮効率の可能性も高くなります。チャンクの大きさ(たとえば、データの行数を含める必要がある)は、さまざまな要因によって異なり、可能性のあるクライアントまたは予想される最低電力のクライアントでの実験を通じて最も適切に決定される可能性があります。たとえば、メッセージごとに100行を送信したい場合があります。
データに効率的な転送形式を使用する
また、socket.ioを使用して大量のデータを転送している場合は、JSON形式の使用方法を再検討することをお勧めします。たとえば、まったく同じプロパティ名を繰り返す100,000個のオブジェクトを送信することは、あまり効率的ではありません。多くの場合、すべてのオブジェクトでまったく同じプロパティ名を繰り返さないようにする独自の最適化を考案できます。たとえば、これらを100,000送信するのではなく、次のようにします。
{"firstname": "John", "lastname": "Bundy", "state": "Az", "country": "US"}
すべてのオブジェクトがまったく同じプロパティを持っている場合は、プロパティ名を独自のコードにコーディングするか、プロパティ名を1回送信してから、受信コードがオブジェクトに入れることができる配列内の値のコンマ区切りリストを送信することができます適切なプロパティ名を使用:
["John", "Bundy", "Az", "US"]
冗長な情報を削除するだけで、データサイズを2〜3倍削減できる場合があります。