Войти на сайт

Войди на сайт, используя одну из соцсетей:

×
Ты уже голосовал за этот комментарий
Наверх


Новости

Оптимизация Выходного: Кэширование

Как мы кэшировали Выходной для того, чтобы еще быстрее помочь провести незабываемые выходные
13 декабря 2012 в 10:19
2593 просмотра

Привет, мы продолжаем нашу субботнюю рубрику об оптимизации Выходного. 

Хоть сегодня и четверг, я расскажу про вещи, которым были посвящены несколько наших последних суббот. 

И в первую очередь это кэширование и перенос изображений на поддомены. На самом деле, ничего страшного в этом нет :) Мы несколько недель разбирались с всевозможными видами кэширования. И решили протестировать 3 их них. 

Мы стали кэшировать запросы по дням недели. Особого эффекта это не принесло. Мы смогли сэкономить в районе 5-10% от времени выполнения скриптов. Зато набили кучу шишек, связанных с тем, что информация о событиях менялась, новые события добавлялись, и каждый раз приходилось удалять весь кеш, потому как некоторые события могут повторяться и влиять не только на какую-то одну дату, но и на целую неделю.

В итоге мы отказались от этого решения, хотя оно и было довольно легким в установке. 

Потом мы решили использовать стандартный плагин и кэшировать всю страницу целиком, но пришлось отказаться и от этого решения, т.к. многие элементы на странице зачастую персонализированы.

Мы стали искать альтернативы. Изучив горы статей, мы остановились на модуле Memcached, который позволяет кэшировать только отдельные части страницы. Тогда мы определили самые ресурсозатратные запросы на страницах, разбили их по блокам и стали кэшировать. 

Самая сложная страница — афиша. Приходится выводить события на месяц вперед, да еще и сеансы, и записи из блога. Мы решили кешировать по дням недели. Осталось определиться с временем хранения кеша. И тогда мы стали кешировать дни недели каждый раз на разные периоды. Для того чтобы мы могли с одной стороны быстро вносить изменения в афишу, а с другой — не обновлять весь кэш за один раз. И мы попробовали кэшировать на случайное время от 5 до 10 минут. В итоге, каждые 10 мин. мы получаем полностью актуальную афишу, при этом обновляем кэш для одного дня за один раз.

Используя эту механику, мы сократили количество запросов к базе данных до 12-14 и увеличили скорость выполнения скриптов.


Сразу отвечу на вопрос: результаты выше, чем на последнем слайде последней оптимизации, потому как мы увеличили количество предзагружаемых фотографий афиш (это можно даже заметить на превью), добавили несколько новых функций и стали выводить блок с последними записями в блоге на главной, что к слову, позволило увечились количество просмотренных страниц и время пребывания на сайте, но об этом мы расскажем отдельно :)
Дальше мы перенесли изображения на разные поддомены. Дело в том, что у некоторых браузеров стоит ограничение на количество одновременных закачек изображений с одного домена. Создав еще 5 новых поддоменов, мы позволили загружать практически все фото афиши одновременно.

На загрузке главной страницы это практически никак не сказалось, а вот при пролистывании этой страницы, когда мы подгружаем остальные фотографии, они даже визуально стали появляться быстрее. Ну, и немного помог аналогичный метод с переносом на поддомены стилей и некоторых скриптов сайта.

Вот пока на этом и остановились. Сейчас планируем потратить несколько суббот на то, чтобы переписать основные функции и оптимизировать их, думаю, мы сможем еще немного снизить нагрузку на сервер. А под Новый год хотим поставить на сервер Nginx, для того чтобы он отдавал статику. Говорят, он делает это намного быстрее, чем Apache. Проверим и расскажем, так ли это :)

С удовольствием отвечу на интересующие вопросы.





Читай также





4 комментария

Алекс Плеханов
Алекс Плеханов 13 декабря 2012 в 13:28
Nginx действительно статику будет выдавать намного быстрее. Тогда можете и с Fastcgi-cache разобраться (там, на самом деле, ничего сложного).
+2
Александр Рыжков
Александр Рыжков 13 декабря 2012 в 16:06
Алекс, спасибо, уже читаем) Думаю в Новый год войдем уже ускоренными!:)
0
Артем Окладов
Артем Окладов 15 декабря 2012 в 21:48
Вы бы еще логин/пароль для фтпшки с сырцами выложили. Выкладывать подробности технической реализации в паблик - моветон.
0
Александр Рыжков
Александр Рыжков 18 декабря 2012 в 12:04
Артем, категорически не согласен. «Моветон» — это сидеть тихонько, в темном углу и скрываться, пытаясь создать «новый Facebook», Артем. А делиться знаниями и опытом с окружающими — вот это я считаю правильным. В том как работает наш сервер, и с какими проблемами нам приходится сталкиваться каждый день, преодолевая их для того чтобы ускорить его еще хотя бы на 0,1с, которую, возможно даже не заметит наш посетитель, в этом, мне кажется нет ничего секретного и позорного. И мне искренне жать, что ты не разделяешь нашего мнения. Возможно мы выросли на разных книжках:)
+3