最近、友人が Ajax の長時間接続プロジェクトに取り組んでおり、ページはサーバーとの長時間接続を維持する必要があり、そのプロセス中に接続がタイムアウトになった後に接続を再要求する必要がありました。何も考えずに jQuery を使ってくださいと言いました。 jQuery には ajaxSuccess ajaxError オブジェクトがありませんか? リクエストが完了した後、またはリクエストが失敗した後に再リクエストするのは良いことではないでしょうか?
しかしその後、彼は jQuery を使用せず、手動で XMLhttprequest を書いたと言いました。最初は jquery で書いていて、テスト中は問題なかったとのことでした。しかし、後で偶然、ページを長時間開いた後、ブラウザのリソース使用量が非常に高く、メモリ不足が発生してクラッシュしていることに気付きました。その後、パケット キャプチャ分析により、各 jquery Ajax リクエストは xmlHttprequest オブジェクトを作成することがわかりました。理論的には、長い接続のリクエストは無限再帰であり、リクエストの数は非常に多くなります。ただし、各リクエストは新しい xmlhttprequest を作成します。さらに、jquery はリソースを自動的にリサイクルしないため、メモリ オーバーフローが発生します。
jquery API を見ると、jquery にはリクエスト完了後のコールバック関数 (リクエストが成功または失敗した後に呼び出される) である完全なオブジェクトもあることがわかりました。 XMLHttpRequest と textStatus という 2 つのパラメータが同時に存在します。したがって、リクエストの完了後に返された XMLHttprequest オブジェクトを手動でリサイクルする必要があるだけです。コードは次のとおりです。