检测 IE11 何时用完内置内存泄漏(1.5GB 可回收池)
Detect when IE11, with its built-in memory leak, runs out of memory (1.5GB recyclable pool)
IE11 有一个有据可查的 iframe 内存泄漏。在 SPA 中,如果您使用 iframe,内存将增长到大约 1.5GB,之后它会变慢直到崩溃。
我的任务是检测浏览器何时即将崩溃并尽快重新启动页面。该应用程序 Vue.JS 嵌入在 ASP.NET MVC 中。
在 IE11 的浏览器中提供了什么样的 memory/performance 检测?
- 某种使用过的内存测量库?
- 某种性能测量库?
- 计算创建的 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 回收内存。有一个奇怪的解决方法 - 您可以打开一个新选项卡,导航到您的应用程序,切换到该选项卡,然后关闭旧选项卡。显然不是一个理想的用户体验,但它比页面刷新更可靠。
在其他情况下,内存泄漏是因为您从主 window 中的某处引用了 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);
IE11 有一个有据可查的 iframe 内存泄漏。在 SPA 中,如果您使用 iframe,内存将增长到大约 1.5GB,之后它会变慢直到崩溃。
我的任务是检测浏览器何时即将崩溃并尽快重新启动页面。该应用程序 Vue.JS 嵌入在 ASP.NET MVC 中。
在 IE11 的浏览器中提供了什么样的 memory/performance 检测?
- 某种使用过的内存测量库?
- 某种性能测量库?
- 计算创建的 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 回收内存。有一个奇怪的解决方法 - 您可以打开一个新选项卡,导航到您的应用程序,切换到该选项卡,然后关闭旧选项卡。显然不是一个理想的用户体验,但它比页面刷新更可靠。
在其他情况下,内存泄漏是因为您从主 window 中的某处引用了 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);