Ошибка обработки "Исключение из памяти" в браузере?

Я отлаживаю веб-приложение javascript/html5, которое использует много памяти. Иногда я получаю сообщение об ошибке в окне консоли, говоря

"uncaught exception: out of memory".  

Есть ли способ обработать эту ошибку внутри приложения?

В конечном счете мне нужно переписать части этого, чтобы это не происходило в первую очередь.

Ответы

Ответ 1

Вы должны рассчитать размер своего локального хранилища, window.localStorage заполнен

в качестве решения заключается в попытке добавить что-то

var localStorageSpace = function(){
    var allStrings = '';
    for(var key in window.localStorage){
        if(window.localStorage.hasOwnProperty(key)){
            allStrings += window.localStorage[key];
        }
    }
    return allStrings ? 3 + ((allStrings.length*16)/(8*1024)) + ' KB' : 'Empty (0 KB)';
};

var storageIsFull = function () {
    var size = localStorageSpace(); // old size

    // try to add data
    var er;
    try {
         window.localStorage.setItem("test-size", "1");
    } catch(er) {}

    // check if data added
    var isFull = (size === localStorageSpace());
    window.localStorage.removeItem("test-size");

    return isFull;
}

Ответ 2

Я также получил то же сообщение об ошибке недавно, когда работал над проектом, имеющим много JS и отправляя Json, но решение, которое я нашел, это обновить атрибут input type="submit" до input type="button". Я знаю, что существуют ограничения использования input type="button".. > , и решение выглядит странно, но если ваше приложение имеет ajax с данными JS, Json, вы можете попробовать. Спасибо.

Ответ 3

Столкнувшись с той же проблемой в Firefox, позже я узнал, что пытался перезагрузить HTML-страницу еще до установки некоторых данных в локальное хранилище внутри цикла if. Таким образом, вы должны позаботиться об этом, а также проверить, где ID повторяется или нет.

Но то же самое отлично работало в Chrome. Может быть, Chrome более умный.