いくつかのオプションがあります。データを返すサーバーへの AJAX 要求を 1 つだけ使用していると想定しています。
1: ajax リクエストを 1 つだけ実行している場合、監視できる唯一の状態はAJAX リクエストの状態であり、それに基づいてパーセンテージを変更します。これに関する問題は、リクエストの送信とサーバーからの結果の受信の間に、リクエストの時間に大きな割合の変化があることです。
2: 複数のリクエストを送信し、データが最初のリクエストのどこで終了したかを何らかの方法で追跡し、一度に少量のデータのみを送信することができます。これには、作成しなければならないリクエストの数に負担がかかるという問題があり、すべてのデータを 1 回返すだけの方がよいでしょう。
テーブルが最適化されている限り、サーバーはすべてのデータをまとめるのにそれほど時間はかかりません。あなたの主な問題は、応答が大きい(> 1MB)ことだと思います。データが 20,000 行しかない場合を除き、送信する不要なデータを削減してみてください。これは非常に迅速な要求になるはずです。
この質問を見ると、ダウンロードされたバイト数を確認する方法が 1 つありますが、特定のブラウザとは互換性がありません。
返されるデータを制限し、要求が X 個を超える結果を返した場合にユーザーにページング オプションを提供することをお勧めします。