我有一個web應用程序編寫的反應,它發送ajax請求來接收5頁文檔的塊。爲此,請求本身遞歸地調用它的函數作爲超時以接收接下來的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分配用於每個請求幾乎〜20MB存儲器(或超時?)。如果我渲染〜250頁的文檔,IE運行的內存,我得到以下錯誤:
Not enough storage is available to complete this operation.
我發現this page,這解釋了setTimeout的設置內部參考,因此,超時被永遠不會被刪除。但只限於IE < 9.所以在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 –