Определите, когда в IE11 с утечкой встроенной памяти заканчивается память (пул, подлежащий вторичной переработке, 1,5 ГБ) - PullRequest
0 голосов
/ 12 февраля 2019

IE11 имеет хорошо документированную утечку памяти iframe.В SPA, если вы используете iframes, объем памяти увеличится примерно до 1,5 ГБ, после чего он будет замедляться до сбоя.

Моя задача - определить, когда браузер вот-вот произойдет сбой, и перезапустить страницу.достаточно скоро.Приложение Vue.JS, встроенное в ASP.NET MVC.

Какой тип определения памяти / производительности доступен в браузере в 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

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Это то, что я использовал, чтобы обнаружить, что 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);
0 голосов
/ 12 февраля 2019

Что касается моего опыта, лучше всего смягчить это, чтобы уменьшить повторное создание iframes и уменьшить общий объем используемой памяти, чтобы утечка была небольшой (например, путем разделения кода неиспользуемого кода, удаления больших библиотек,так далее).Затем вы можете выполнить тест, чтобы определить приблизительный объем памяти, который вы ожидаете просачивать на загрузку страницы (или какую-либо соответствующую метрику в вашем случае), и придумать эвристику для перезагрузки приложения (например, после загрузки 50 страниц).

Имейте в виду, что иногда перезагрузка приложения не поможет IE восстановить память.Для этого есть странный обходной путь - вы можете открыть новую вкладку, перейти к своему приложению, переключиться на эту вкладку и закрыть старую вкладку.Очевидно, что это не идеальный пользовательский интерфейс, но он более надежен, чем обновление страницы.

В других случаях происходит утечка памяти, поскольку у вас есть ссылка на iframe где-то в главном окне, или вы не очистили событиеобработчики внутри iframe перед его удалением - я предполагаю, что вы проверили это в описании, но я подумал, что не мешало бы упомянуть об этом:).

...