ホームページ > ウェブフロントエンド > jsチュートリアル > jQuery Ajax関数使用時の注意点(メモリオーバーフロー)_jquery

jQuery Ajax関数使用時の注意点(メモリオーバーフロー)_jquery

WBOY
リリース: 2016-05-16 17:52:59
オリジナル
1385 人が閲覧しました

最近、友人が Ajax の長時間接続プロジェクトに取り組んでおり、ページはサーバーとの長時間接続を維持する必要があり、そのプロセス中に接続がタイムアウトになった後に接続を再要求する必要がありました。何も考えずに jQuery を使ってくださいと言いました。 jQuery には ajaxSuccess ajaxError オブジェクトがありませんか? リクエストが完了した後、またはリクエストが失敗した後に再リクエストするのは良いことではないでしょうか?

しかしその後、彼は jQuery を使用せず、手動で XMLhttprequest を書いたと言いました。最初は jquery で書いていて、テスト中は問題なかったとのことでした。しかし、後で偶然、ページを長時間開いた後、ブラウザのリソース使用量が非常に高く、メモリ不足が発生してクラッシュしていることに気付きました。その後、パケット キャプチャ分析により、各 jquery Ajax リクエストは xmlHttprequest オブジェクトを作成することがわかりました。理論的には、長い接続のリクエストは無限再帰であり、リクエストの数は非常に多くなります。ただし、各リクエストは新しい xmlhttprequest を作成します。さらに、jquery はリソースを自動的にリサイクルしないため、メモリ オーバーフローが発生します。

jquery API を見ると、jquery にはリクエスト完了後のコールバック関数 (リクエストが成功または失敗した後に呼び出される) である完全なオブジェクトもあることがわかりました。 XMLHttpRequest と textStatus という 2 つのパラメータが同時に存在します。したがって、リクエストの完了後に返された XMLHttprequest オブジェクトを手動でリサイクルする必要があるだけです。コードは次のとおりです。

コードをコピー コードは次のとおりです:

$.ajax({
url: "http://www.jb51.net",
data: { name: "xxxx" },
dataType: "xml",
success: function (data, textStatus) {
//何かをします...
},
complete: function (XHR, TS) { XHR = null }
});
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート