2014-09-27 3 views
3

Я использую локальное хранилище, потому что после щелчка страница перезагружается, поэтому я могу отслеживать последний щелчок.

Как вы можете видеть, я попытался очистить localStorage, чтобы уменьшить используемую память, но она уже на 1.000.000K менее чем за 10 минут использования.

Этот сценарий обновляет эти переменные в разных местах каждый раз, когда моя страница перезагружается?
Что происходит с тем, что он использует эту память?

Это мой весь код.

Это расширение, которое я создаю для хром, оно выбирает вариант и нажимает кнопку, кнопка отправляет форму, перезагружает страницу, и она снова и снова появляется.Простая функция с использованием большого объема памяти

var last = localStorage.getItem('last'); 
var current = getNext(last); 
var prox = getNext(current); 

localStorage.clear(); 

$('select[name="myselect"] option').each(function(){ 
    if($(this).val().indexOf(current)>-1){ 
     $(this).prop('selected', true); 
     $('.abc').first().click(); 
     localStorage.setItem('last',current); 
    } 
}); 

function getNext(current){ 
    var arrIds = ['227','228','229','230','231','232']; 
    return arrIds[arrIds.indexOf(current)+1] || '227'; 
} 

Обновленный код, без деклараций вар, что уменьшилось потребление памяти резко, но со временем, память поднимает (через десять минут вышел из 160.000K в 240.000K):

$('select[name="myselect"] option').each(function(){ 
    if($(this).val().indexOf(getNext(localStorage.getItem('last')))>-1){ 
     $(this).prop('selected', true); 
     $('.abc').first().click(); 
     localStorage.setItem('last',getNext(localStorage.getItem('last'))); 
    } 
}); 

function getNext(current){ 
    var arrIds = ['227','228','229','230','231','232']; 
    return arrIds[arrIds.indexOf(current)+1] || '227'; 
} 
+2

Это не выглядит так, как если бы этот код мог нести ответственность за потребление памяти. – Pointy

+0

Когда вы говорите «перезагрузка страницы», действительно ли она перезагружается, или вы как-то обновляете ее содержимое? Если вы удалите код выше, устранит ли он утечку? – 2014-09-27 14:00:04

+0

Pointy, это все мой код. Squint, страница действительно перезагружается полностью, когда клик выполняется, я постараюсь не использовать vars. – BernardoLima

ответ

4

Согласно обсуждению в комментариях ниже вопроса, проблема, похоже, исходит от самого jQuery. Точная причина пока не известна, но, похоже, jQuery сохранил данные, которые не выдаются при отправке формы.

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

jQuery создает большой потенциал для утечек памяти путем хранения данных и замыканий в глобальной ссылке под названием jQuery.cache. Если это не очищено должным образом, утечки изобилуют.

Поскольку вы создаете расширение Chrome, вам не нужно много заставлять вас использовать jQuery, так как вам не нужно беспокоиться о несовместимости браузера с браузерами, такими как IE6 и 7. С помощью DOM API напрямую без таких зависимостей, общий код будет меньше и намного быстрее.

Смежные вопросы