2009-11-26 1 views
1

Я выполняю запрос AJAX с веб-страницы с поддержкой JavaScript (+ jQuery) каждые 5 секунд для набора данных JSON. Я оставил свою заявку на ночь, и к утру мой компьютер полностью замерз. Я сузил его до своего веб-браузера, и теперь, используя Google Chrome Resource Tracker, я вижу, что каждый запрос вносит новые расходы на память, а старые JSON задерживаются.Явная утечка памяти в веб-приложении (возможно, от AJAX?)

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

Любые идеи? Я перезаписываю предыдущую переменную, поэтому я не понимаю, почему предыдущие данные должны быть сохранены. Увеличение памяти не происходит на одном и том же интервале по запросам AJAX, поэтому, возможно, это что-то еще. Я был бы рад отправить кому-то код в частном порядке, если это поможет.

Спасибо всем :-)

Gausie

+1

Можете ли вы предоставить исходный код? –

+0

Это происходит только в Chrome? – jitter

+0

Работа над предоставлением исходного кода сейчас, и нет. Infact Chrome, по-видимому, страдает меньше всего! – Gausie

ответ

1

Что вы делаете с данными?

Вероятно, это не преступник jquery ajax.

Являетесь ли вы дом? Вы забыли объявить переменную с помощью префикса var? вы удаляете контент, используя innerHTML = ''?

+0

Мне не хватало var от пары переменных, поэтому я тестирую поведение с префиксом var на месте. Обычно я удаляю содержимое с помощью .remove() или .empty() из jQuery. Как я могу узнать, растет ли DOM? – Gausie

+0

Существует плагин DOM Monster от Thomas Fuchs, но он не является бесплатным.Используя панель webdeveloper, вы можете сделать «просмотр сгенерированного источника», а затем вставить его в некоторый инструмент сравнения и сравнить его с более поздним состоянием. Если ваш дом не слишком велик, то огненного буфера будет достаточно. Но отсутствующий префикс var является полностью хорошим уловом, поэтому я бы посоветовал вам сначала очистить ваше приложение. – Olivvv

+0

Кажется, что исправлено после добавления префиксов var. Благодаря! – Gausie

0

Во-первых, убедитесь, что Ajax запрос, который вызывает утечку. Не запрашивайте этот аякс каждые 5 секунд и проверьте, не потеряла ли память.

Если это запрос, возможно, вы переопределите одну переменную, но у вас есть другая переменная, указывающая на эти данные? Что-то вроде этого:

var a = json_object; 
var b = json_object; 
//A lot of other code here 
var a = json_object2; 

json_object все еще находится в памяти, точки вар б на него. Если нет var b, возможно, вы добавите его в какую-либо карту или массив? В этом случае карта или массив указывают на нее.

+0

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

0

Невозможно ответить, потому что вы не предоставили образец кода. В целом проверьте на неправильное использование крышки ... В любом случае - отметьте это сообщение http://www.crockford.com/javascript/memory/leak.html и используйте Google или укажите некоторые примеры. Удачи!

+0

Я это понимаю, но я не знаю, какую часть кода загрузить. Если вы хотите, я могу отправить вам копию в частном порядке? – Gausie

+0

Попробуйте удалить/подставить секретные/частные части кода, поместить его где-нибудь в Интернете (например, http://jsbin.com/) и дать нам ссылку. Таким образом, некоторые из нас могут проверить ваш код и попытаться помочь вам. Сообщество - сильный источник идей;) – NilColor

+0

http://jsbin.com/asavu Это правильный вид? Раньше я никогда не использовал jsbin, и я не знаю формы, в которой мое представление может быть самым полезным. – Gausie

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

  • Нет связанных вопросов^_^