检测内置内存泄漏的IE11何时耗尽内存(1.5GB可回收池)



IE11有一个详细记录的iframe内存泄漏。在SPA中,如果您使用iframe,内存将增长到大约1.5GB,之后内存将减慢,直到崩溃。

我的任务是检测浏览器何时会崩溃,并尽快重新启动页面。该应用程序是嵌入在ASP.NET MVC中的Vue.JS。

IE11的浏览器中提供了什么类型的内存/性能检测?

  • 某种使用过的内存度量库
  • 某种性能度量库
  • 计算创建的javascript对象
  • 计算创建的iframe

其他想法?谢谢。:)

来源:https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10186458/https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8449104/http://support.sas.com/kb/60/514.html

根据我的经验,缓解这种情况的最佳方法是减少iframe的重新创建,并减少使用的总内存,从而减少泄漏(例如,通过代码拆分未使用的代码、删除大型库等)。然后,你可以做一个测试来估计每次页面加载预计会泄漏多少内存(或者你的情况下的任何相关指标),并提出一个重新加载应用程序的启发式方法(例如,在50个页面加载后)。

请记住,有时重新加载应用程序不会帮助IE回收内存。有一个奇怪的解决方法-你可以打开一个新的选项卡,导航到你的应用程序,切换到那个选项卡,然后关闭旧的选项卡。显然这不是一个理想的用户体验,但它比页面刷新更可靠。

在其他情况下,内存泄漏是因为您在主窗口中的某个位置引用了iframe,或者在删除它之前没有清理iframe中的事件处理程序——我想您已经从描述中检查过了,但我认为提到它不会有什么坏处:)。

这就是我最终用来检测IE11内存不足的方法。

主要思想:每1秒定时一次。如果1秒计时器需要1分钟,我们就僵住了。

var startTime, endTime;
function start() {
startTime = new Date();
};
function end() {
endTime = new Date();
var timeDiff = endTime - startTime; //in ms
// strip the ms
timeDiff /= 1000;
// get seconds 
var seconds = Math.round(timeDiff);
console.log(seconds + " seconds");
if (seconds > 60)
console.log("IE11 just froze. We need to refresh.");
}
start();
setInterval(function () {
end();
start();
}, 1000);

最新更新