все!Я работаю над каким-то календарем событий и использую jQuery для внешнего интерфейса и PHP для внутреннего.У меня есть все данные календаря, созданные с помощью PHP и отправленные клиенту в кодировке JSON.
Рассмотрим следующий код (упрощенно):
jQuery(document).ready(function($) {
// property which contains calendar object
this.Calendar;
// get calendar object
show_month();
/* Assign a click event to the next month button */
$('#cal_month .next span').live('click', function() {
var month = $(this).attr('id');
var year = $(this).attr('class');
show_month(month, year);
});
function show_month(month, year) {
// delete pointers to the current month object
window.Calendar = undefined;
// get new month object
window.Calendar = get_month(month, year);
/* doing some stuff with this object here, like output to the
document etc., no event bindings */
}
function get_month(month, year) {
var calendar;
$.ajax({
type: 'GET',
dataType: 'json',
async: false,
timeout: 100,
url: '../some_url.php?month='+month+'&year='+year,
success: function(result) { calendar = result; }
});
return calendar;
}
var counter = 0;
while (counter != 1000) {
$('#cal_month .next span').trigger('click');
counter ++;
}
});
Переключение месяцев вручную, а также создание циклаприводит к огромной утечке памяти.Я прочитал кучу информации об утечках памяти, js-замыканиях и т. Д. Здесь и в целом в Интернете, но я думаю, что у меня все еще есть некоторое недопонимание.Я был бы рад получить некоторые идеи о том, что не так в моем коде.
ОБНОВЛЕНИЕ
Я измеряю использование памяти, наблюдая за firefox.exe (другие браузеры имеют такую же проблему) в диспетчере задач.Запоминание не освобождается, даже когда я перехожу со страницы.И через некоторое время это приводит к значительному падению производительности, поскольку я могу заставить его использовать более 600 Мбайт.
Я также написал цикл для переключения месяцев (добавлен код выше).
ОБНОВЛЕНИЕ 2
Причина, по которой я использовал глобальный режим, заключалась в том, что в моем календаре событий также есть представления недели и дня, поэтому я хочу, чтобы активный объект месяца был доступен дляфункции, которые заботятся об этих двух представлениях, уничтожают их и получают новое, только когда пользователь переключает месяц.Моей проблемой было именно использование глобалов.Это было решено, теперь пытаясь выяснить, как сохранить объект доступным, пока пользователь явно не переключит месяц ...
Кстати, я создал цикл while только для целей бенчмаркинга, он не имеет ничего общего смой фактический код.