Lugavchik
23:26 17-04-2012 оригинальный баг с gzip и content-length

Пишу сайт на собственном движке, мой сайт тоже работает на ней, только более старой. Конечно он не идеален и мало что умеет, но что умеет делает надёжно. В этом я был уверен, пока месяца два на одной странице не начались тормоза.

По ачалу я подумал, что страница распухла и где-то мои скрипты обрабатывающие большую простынку формы отчёта и ещё большую простынку готового отчёта просто вводили браузер не шустрого нетбука в ступор, но ситуация не менялась и на других компьютерах, даже шустрый домашний также задумывался.. Начал копать глубже, поставил отладку в скрипты, но они только показали что событие document.ready происходило через 13-14 секунд после того как скрипт загрузится.

Начал перебирать все скрпты на странице, может кто стартует не дожидаясь загрузки страницы, но нет таких, все просят оповестить их об окончании загрузки, чтобы они начали обрабатывать. "Дело-дрянь" — решаю я.

Тогда вырезаю печатную форму простынки... Опа. Ошибка. Ладно не буду отвлекаться, потом пойду исправлять, иначе покарают...и делаю эту форму подгружаемой при попытки её развернуть, а вот про то что надо бы её ещё подгрузить если пользователь собирается печатать, я и не подумал... Но не об этом я сейчас. Убрал простынку отчёта и страница стала грузиться за доли секунды. Чудеса.. А ещё и простынка подгружаться за доли секунды стала и обрабатываться... Но раз всё полетело, думаю значит где-то что-то, но оставим на потом... И вот радостный собираюсь написать начальнику об изменениях и опять тормоза, но уже в сообщениях, где всего-то 20 сообщений на странице, что такое??? Начинаю разбираться там... Тормозит также 13-14 секунд. На страничке с 20 блоками? Как так, на больших редакторах отчёта не тормозит, а тут несколько блоков с текстом и всё умирает...

Начинаю отключать скрипты по одному.. Страница становится всё ужаснее и ужаснее, но тормоза не пропадают. Отключаю вообще всё. И скрипты и стили. Тормоза остаются.. Включаю отладку в FireFox, он мне показывает что эта страничка загружается за 15.1с. Пробую несколько раз.. Эффект не меняет 15 с хвостиком.. Регулярные визиты к дяде Гуглю не помогают.. Вон я как их затерроризировал своими запросами, что у них почта сломалась =). Ну думаю где-то в настройках веб сервера проблема спряталась. Иду глядеть на конфиг-файлы, дабы обрести ясность ума т.к. в магию не верю. И после беглого осмотра замечаю переменную KeepAliveTimeout, ну думаю может оно, ставлю там 5, прошу перечитать конфигурацию.. F5, опа! задержка в 5 секунд, кажется попал.. Идём пинать Гугль, странно, все говорят что их надо включать и ставить чтобы сайты грузились быстрее. Ладно значит ошибка в другом месте, но оставим 5, т.к. это не так тяжко как 15 секунд, а не решим и вовсе отключим на время.

Что же может быть не так, начинаю думать я. Такое бывает, когда браузер считает что страница не загрузилась полностью, но почему? Есть у меня часть когда котора после формирования всей страницы определяет её длину и устанавливает соответствующий заголовок, а потом злой веб сервер в тайне сжимает  страничку через mod_gzip и отдаёт пользователю.. Соответвенно или не меняет этот заголовок и начинает врать с ним, а как было на стадии тестирования движка не верно указанная длина страницы заставляет браузер висеть и ждать, а когда же будут данные дальше. Решаю отключить вывод, всё равно тот сайт корпоративный и поисковиков на него не пустим, а браузерам не так и важно есть такой заголовок или нету.

Отключив вывод размера, обнаруживаю что тормоза пропали совсем. Спокойно возвращаю переменную в 15 секунд и грустный получаю глубокое удовлетворение от исправленной ошибки.

Вот так, 1 строчка в файле который уже 2 года не трогаешь, всплывает и начинает портить жизнь...