私は、5ページのドキュメントのチャンクを受け取るようにajaxリクエストを送信する、reactで書かれたwebappを持っています。このため、リクエスト自体は、次の5ページを受信するためのタイムアウトとして再帰的にその関数を呼び出します。Internet Explorerのメモリリーク
追加情報:私はnpmリポジトリから公式のフラックスを使用します。 コードの例次の:
function getPages() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState === 4 && this.status === 200) {
var resp = JSON.parse(this.responseText);
SwitchViewAction.addPages(resp); // calls another setTimeout later,
// because of react lifecycle
if (Object.keys(resp).length > 0) {
setTimeout(getPages(), 0);
}
}
};
xhttp.open("GET", '/GetDocumentPages/', true);
xhttp.send();
}
問題は、IE 11は、各要求に対してほとんど〜20メガバイトのメモリを割り当てること、である(またはタイムアウト?)。私は〜250ページで文書をレンダリングする場合は、IEがメモリを使い果たして、私は次のエラーを取得:
Not enough storage is available to complete this operation.
私は
this pageを発見し、タイムアウトが削除されることはありませんので、setTimeoutメソッドが内部基準を設定することを説明しています。しかし、IE <のためだけです。したがって、この問題は11ではありません。
Chromeがこれを完全に処理します。この巨大な文書の最大メモリ使用量は約170MBです。 IEは1GB以上を実行し、上記のエラーをコンソールに返します。コードの後半で、配列に "resp"を追加します。私はそれを追加しない場合、IEは〜220MBのメモリ使用量にとどまります。だからimhoには参照問題があるはずです。
詳細情報:ドキュメントページはbase64で送信されます。すべてのページを受け取ったときの最大サイズを計算しました。 249ページの文書の場合は162MBです。
これはIEが参照を処理する際の問題ですか?IEはメモリを解放しないのですか、まったく間違ったトラックですか?だから、それはどうしたのだろう?
最初にお読みください:https://msdn.microsoft.com/en-us/library/bb250448(v=vs.85).aspx –