2016-05-31 9 views
1

私は、データベース全体のオブジェクトのリストをjoinで返すAPIを持っています。AJAXクラッシュブラウザ(200MBの応答)

私がテーブルを1つも持っていなかったとき、データは150MBでしたが、すべてがOKでした。 大きなテーブル(50MB)を追加してブラウザがクラッシュするという問題がありました。

ブラウザをクラッシュせずに200MBの応答を得る方法はありますか?

+1

部品を介して送信しますか? – xAqweRx

+7

'はい、すべてが必要です、それはクールなレポートです'。それがそれに対するあなたの態度なら、いいえ、それを行う方法はありません。効率性を見つけるのが難しく、存在します。 – Adam

+3

何百万ページ分のページングを行わずに200MB相当のデータを表示する純粋なユーザビリティの観点からは恐ろしいことです。私はサブセットを引っ張って、必要なときにステップインすることをお勧めします。そのデータはすべて解析してRAMに保存し、200MB以上のRAMを使用する必要がありますので、クラッシュすることを防ぐことはできません。 –

答えて

4

よりも、最初の最も重要なデータになるだろう未来の驚きを防ぐことができますようこのデータはすべてブラウザに必要ですが、大規模なデータセットを扱う場合のパフォーマンスへの影響を受け入れることができます。

ここでの問題は、データ自体の生のサイズではない可能性がありますあなたがそれを持っているフォーマットです。

200MBをJSONに入れて、あなたのブラウザがそのデータを解析して、そのデータすべてを使ってメモリ内に単一のオブジェクトを作成すると、あなたは悪い時を過すでしょう。同じことがXMLにも当てはまります。さらに、200MBのダウンロードでは、データをロードするときにユーザーに進捗状況を示したいと思うかもしれません。ロードされたデータの一部を表示することさえできます。このすべてのソリューションは、データをチャンクすることです。私はあなたのデータが主にアレイベースであると推測しています。その配列の要素をチャンクでロードします。一度に10k個のレコードから始めて、それがどこに届くかを見てください。

AJAXを使用してデータを取得することもできます。これは、レスポンスの解析の問題を解決したためです。しかし、Webソケットを利用して要求のオーバーヘッドを減らすことも考えられます。 (可能であればHTTP/2を使用してください)

また、JSONとXMLで使用できるストリーミングパーサーがあることを指摘しておきます。これを行うには、データストリームを取得できる必要があります(Webソケットはこれを簡単にします)。また、データフォーマットが有用かどうかによって異なります。

データをチャンクしてもクラッシュする場合は、開発者ツールで快適になり、メモリ使用量をプロファイルします。 Webページにロードできるものには制限があります。これらはブラウザによって異なります(システム間、特にモバイルデバイス上では異なります)。

0

これが役立つかどうかわかりませんが、データが分割され、現在の処理が完了した後に複数の呼び出しを行うことができます(チャンク順序のインデックスを渡す可能性があります)。あなたは200メガバイトのデータ

のすべてを取得する必要がある場合には、この方法は、あなたは通常、私はと仮定すると、必要なだけ、他の部分(通常はユーザーのアクション)

+3

OPの問題を解決できないことは事実上保証されています.OP **には200MBのデータが必要ですaならば、一度に少し送信されても​​、彼のアプリケーションでのメモリ要求は200MBよりもかなり高くなります。アプリケーションが失敗するのはそのときです。 – Adam

+0

私はそれが多くのデータであることを知っています。なぜそれが一度必要なのかわかりません。私は1つの要求で1MB以上行くつもりはありません。 –

+1

ブラウザは200 MBのデータをダウンロードしても問題ありません。人々は通常数ギガバイトのファイルを定期的にダウンロードします。問題は*データを表示することであり、ダウンロードすることではありません。後者がより多くのメモリとリソースを消費する可能性があることを除いて、1 MBをダウンロードする200 MBまたは200 MBのダウンロード要求を1回要求すると、違いはありません。 – JJJ