Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Как мы ускорили свой сайт (а заодно и сотни других)
Знаете ли Вы, любители “этого интересного”, что если: Ваш сайт находится на хостинге TimeWeb (из списка “Рекомендованных хостингов”) и если Вы включаете CDN в попытке сделать сайт быстрее - то вы сделаете Ваш сайт медленнее.
По крайней мере так будет еще минимум 1 неделю. А началось все с того, что мне захотелось оптимизировать скорость загрузки нашего собственного сайта (что в свою очередь было навеяно статьей про важность скорости загрузки сайта). Все-таки сайт веб-студии должен быть образцом во многих отношениях, в том числе и по скорости работы.
Большинство мер по убиранию тормозов у нас уже было проведено:
Везде где нужен кеш - он включен
Сайт многократно прогонялся по монитору производительности
По совету монитора производительности были созданы пара индексов на базе данных (а еще пара была неэффективной и создана не была)
Включено объдинение CSS/JS
Включен CDN
Поковырявшись в отладчике Google Chrome нашел пару CSS и JS которые не объединялись с остальными файлами. Эта проблема была исправлена быстро.
Напоследок решил посмотреть что выдаст анализатор скорости загрузки сайта sitespeed.ru. А выдал он довольно интересные факты, на которые я как-то не обратил внимание находясь в отладчике Google Chrome.
Время загрузки
Объем загружаемых данных
Первый заход
30.081s
4 963 kb
Повторный заход
22.657s
3 644 kb
Нужно сказать что при нашей скорости интернета загрузка страницы занимала не больше 3х секунд, но не у всех такой быстрый интернет.
Проблему с объемом данных загружаемых при первом заходе победить несложно - больше всего занимала графика в слайдере. Сжали картинки посильнее и получили выигрыш почти в 2 мегабайта. Дополнительно создали сжатые (.gz) копии сторонних шрифтов.
А вот вторая проблема большого объема скачиваемых при повторном заходе данных - это уже совсем другое. Действительно, если посмотреть в Google Chrome - при повторном открытии картинки с CDN браузер не кешировал ее, а каждый раз скачивал заново.
При выключенном CDN - все кешировалось.
Далее следуют почти 2 недели переписок с поддержкой 1С-Битрикс и TimeWeb. Как они играли мной в пин-понг пожалуй опущу. В результате всех терок выяснилось следующее:
CDN при забирании статики с вашего сайта запоминает отдаваемые сервером заголовки ответов и при отдаче файла с обратно заголовки в точности повторяет.
Сервер TimeWeb-а отдавал для картинок 2 неверных заголовка
Браузер при получении файлов с CDN почему-то обращал внимание на эти заголовки и т.к. они были неправильные - не кешировал файлы.
К проблемным заголовкам относились вот эти:
Last-Modified: Thu, 20 Jun 2013 09:51:24 GMT
Last-Modified:: 1371725085 (дубль с неправильным синтаксисом)
После исправления этих заголовков (TimeWeb убрал неправильный) появился вот такой:
Cache-Control: no-cache
Он тоже был удален поддержкой TimeWeb. После этого мы обновили дату изменения всех файлов в папке /upload/ и /bitrix/templates/наш_шаблон_сайта/ и о чудо! Картинки с CDN стали кешироваться. Описанные меры (сжатие картинок и кеширование статики браузером при получении с CDN) позволило прийти к следующим результатам (по данным все того же sitespeed.ru):
Время загрузки
Объем загружаемых данных
Первый заход
13.998s
2 267 kb
Повторный заход
8.97s
1 362 kb
Внимательный читатель спросит меня, а как же к названию поста относится все что я написал? А очень просто:
Поддержка TimeWeb пообещала удалить неверный заголовок Last-Modified на всех своих серверах. "Мы внесли сейчас изменения и подождем неделю, если проблем не возникнет, изменение внесем полностью." - TimeWeb
Поддержка TimeWeb пообещала удалить неверный заголовок Last-Modified на всех своих серверах. "Сейчас эта конфигурация только для вашего сайта. Но мы проанализируем текущую конфигурацию nginx на всех серверах на счет подобных изменений заголовков." - TimeWeb
Получается что все сайты, которые лежат на TimeWeb и включили функцию CDN скоро получат такую работу CDN, какой она должна быть - с кешированием картинок. Для тех, кто не хочет ждать, алгоритм действий следующий:
Просим поддержку TimeWeb удалить неверный заголовок Last-Modified
Когда это сделано, проверяем не появился ли заголовок Cache-Control: no-cache и просим удалить его если появился
Обновляем дату модификации всех статических файлов на сайте (выполняем в консоли команду find . -exec touch {} \; находясь в папках /upload/ и папке шаблона сайта)
Как мы в очередной раз убедились у TimeWeb адекватная служба поддержки, которая признает ошибки и исправляет их (а ошибки делают все люди). Поэтому не стесняйтесь к ним обращаться.
Ну и напоследок я провел тест с выключенным CDN.
Время загрузки
Объем загружаемых данных
Первый заход
13.757s
2 174 kb
Повторный заход
2.585s
37 kb
Здесь меня ждал неожиданный результат - время загрузки и объем загружаемых данных при повторном открытии уменьшился!!! Как так? Объяснение этому чуду было следующее: на CDN не отправляются сжатые (.gz) копии стилей/скриптов/шрифтов. А жмутся через gzip они очень хорошо.
Какой вывод мы сделали: следить за размером ваших страниц и файлов нужно - само все хорошо не будет (и CDN это не панацея). К чему пришли:
починили кеширование картинок с CDN на TimeWeb
отказались от использования CDN до тех пор пока туда не будут отправляться сжатые копии статических файлов (На основе информации из данного обращения была создана заявка в отдел разработок. Номер обращения в разработку: 40808.)