У меня довольно тяжелый сайт, и я пытаюсь настроить производительность.
У меня есть функция, которая запускается от 20 до 200 раз, в зависимости от пользователя.
Я вывожу время, необходимое для выполнения функции через console.time в Firefox.
Для завершения функции требуется около 4-6 мс.
Странно то, что в моем большом тесте с 200 или через эту функцию,
он проходит первые 31, затем, кажется, останавливается почти на секунду, прежде чем завершить последние 170 или около того.
Однако эта «пауза» не отображается в журналах console.time, и я не запускаю никаких других функций, и объект, который передается в функцию, выглядит так же, как и все другие объекты, которые передаются. в.
Функция называется так
for (var s in thisGroup.events){
showEvent(thisGroup.events[s])
}
итак, я не понимаю, как или почему это внезапно остановится в самом начале. но сделать паузу только один раз, а затем продолжить.
Пауза ВСЕГДА происходит в 31-й раз с помощью функции.
Я внимательно посмотрел на 'thisGroup.events [s]', через который он проходит, и он выглядит так для # 31
"eventId":"5106", "sid":"68", "gid":"29", "uid":"70","type":"event", "startDate":"2010-03-22","startTime":"6:00 PM","endDate":"2010-03-22","endTime":"11:00 PM","durationLength":"5", "durationTime":"5:00", "note":"", "desc":"event"
Событие сразу после паузы, # 32 выглядит так
"eventId":"5111", "sid":"68", "gid":"29", "uid":"71","type":"event", "startDate":"2010-03-22","startTime":"6:00 PM","endDate":"2010-03-22","endTime":"11:00 PM","durationLength":"5", "durationTime":"5:00", "note":"", "desc":"event"
другое событие, которое проходит без проблем, выглядит так
"eventId":"5113", "sid":"68", "gid":"29", "uid":"72","type":"event", "startDate":"2010-03-22","startTime":"4:30 PM","endDate":"2010-03-22","endTime":"11:00 PM","durationLength":"6.5", "durationTime":"6:30", "note":"", "desc":"event"
На выходах консоли оно не отображается, поскольку в самой функции есть что-то зависшее или занимающее время, так как console.time для каждого события, включая # 31,32, равно 4 мс.
Другая странная вещь заключается в том, что общее время прохождения цикла for по всему объекту составляет 1014 мс, что подходит для 200 событий по 4-6 мс каждый.
Любые предложения о том, как найти эту «паузу»?
Мне очень интересно, что это постоянно происходит только между # 31 и # 32!
------------------- немного намека на проблему, но нет решения ---------------- ---
Если это выглядит как отставание от того места, где я поместил html в дом.
Я удалил все виды кода, но когда я удаляю
jQuery('div#holdGroups').append(putHtml);
Это когда лаг останавливается.
Есть ли способ сделать очистку или что-то еще в приложении? Я пробовал .html, но это не лучше, и действительно хочу добавить.
Во время паузы я могу сделать точный подсчет 3, что на самом деле не очень хорошо, и я не могу заставить паузу отображаться где-либо в консоли или профиле.
Он показывает, что фактическое добавление занимает всего 117мс, но это довольно большой кусок html с 6 таблицами, так что я не думаю, что это слишком плохо.
-------------- дальнейшее обновление - возможно сборка мусора ?? -----------------------
Согласно нескольким ответам ниже, это может быть проблемой со сборкой мусора, хотя я не могу быть уверен.
Я попытался удалить используемые переменные, такие как переменная, которая содержит HTML, который добавляется в DOM через
delete putHtml;
так же, как и другие переменные, но это никак не повлияло.
Если проблема в сборке мусора, может, я собираюсь исправить это неправильно?
Есть лучший способ сделать это?
Есть ли способ определить, является ли сборка мусора проблемой?