Кэширование в Веб разработке
на серверном и клиентском уровнях
(на примере связки MySQL + PHP)

Докладчик: ЯРЕМЕНКО Алексей Сергеевич
Зачем?
▪ Уменьшение времени отклика приложения (сайта)
▪ Уменьшение нагрузки на сервер
▪ Уменьшение генерируемого трафика
▪ Увеличение радости нашего пользователя
Технология «клиент-сервер»

Запрос выполняется по протоколу HTTP
Возможные уровни кеширования

Серверный

Клиентский

▪ Запросы к БД
▪ Исполняемый код

▪ Статичные данные
(HTML, JS, CSS, IMG)
▪ Результаты
выполнения AJAX
запросов

▪ Кэширование тяжелых данных
на жестком диске

▪ Кэширование частых
небольших данных в
оперативной памяти
Кэширование запросов к БД
Почему иногда не срабатывает кэширование
▪ В MySQL запросы должны быть написаны
идентично (учитывется даже регистр)
▪ При обновлении таблицы (INSERT, UPDATE) кэш
сбрасывается
Решение: Вынести часто изменяемые таблицы отдельно

▪ Не кэшируются запросы содержащие функции
времени, даты, а так же некоторые другие
Решение: заменить функции на константы
WHERE `date` > NOW()  WHERE `date` > '2012-05-06‘

▪ Помните про лимит памяти и фрагментацию
Кэширование результатов работы на
жестком диске
▪ Можно кэшировать HTML блоки часто
вставляемые в код страницы
или целиком страницы
▪ Готовые инструменты (например EZ cache)
позволяют автоматически проверять наличие кэша,
его свежесть и генерировать пути хранения файлов
▪ Правильно настроенный веб сервер может
отдавать готовые HTML файлы очень быстро
Кэширование данных в оперативной
памяти (Memcache, APC)
▪ Можно кэшировать как результаты запросов к БД,
результат сложных вычислений, а так же часто
используемые HTML блоки небольших размеров
▪ Memcache в основном используется для
организации единого кэша между серверами
▪ APC помимо данных кэширует PHP код
Кэширование на стороне клиента
▪ Заголовок Expires говорит браузеру брать
результат запроса из кэша до указанной даты
Expires: Sun, 24 Jan 2013 20:59:20 GMT

▪ Результаты частых AJAX запросов можно
сохранить в обычной переменной
▪ Склеивание JS, CSS и изображений в один файл
чтобы минимизировать количество запросов к
серверу
Способы «оживления» страницы
•

В зависимости от Cookie при помощи JS показывать различные
блоки (авторизован / не авторизован)

•

<script src="/comments.php?songid=12345"></script>

•

SSI:
<!--#if expr="СТРАНИЦА ПЕСНИ" -->
один вид рекламы
<!--#elif expr="СТРАНИЦА ГРУППЫ" -->
второй вид рекламы
<!--#endif -->
Спасибо за внимание!
С удовольствием отвечу на Ваши
вопросы!

Кэширование в Веб разработке на серверном и клиентском уровнях

  • 1.
    Кэширование в Вебразработке на серверном и клиентском уровнях (на примере связки MySQL + PHP) Докладчик: ЯРЕМЕНКО Алексей Сергеевич
  • 2.
    Зачем? ▪ Уменьшение времениотклика приложения (сайта) ▪ Уменьшение нагрузки на сервер ▪ Уменьшение генерируемого трафика ▪ Увеличение радости нашего пользователя
  • 3.
  • 4.
    Возможные уровни кеширования Серверный Клиентский ▪Запросы к БД ▪ Исполняемый код ▪ Статичные данные (HTML, JS, CSS, IMG) ▪ Результаты выполнения AJAX запросов ▪ Кэширование тяжелых данных на жестком диске ▪ Кэширование частых небольших данных в оперативной памяти
  • 5.
    Кэширование запросов кБД Почему иногда не срабатывает кэширование ▪ В MySQL запросы должны быть написаны идентично (учитывется даже регистр) ▪ При обновлении таблицы (INSERT, UPDATE) кэш сбрасывается Решение: Вынести часто изменяемые таблицы отдельно ▪ Не кэшируются запросы содержащие функции времени, даты, а так же некоторые другие Решение: заменить функции на константы WHERE `date` > NOW()  WHERE `date` > '2012-05-06‘ ▪ Помните про лимит памяти и фрагментацию
  • 6.
    Кэширование результатов работына жестком диске ▪ Можно кэшировать HTML блоки часто вставляемые в код страницы или целиком страницы ▪ Готовые инструменты (например EZ cache) позволяют автоматически проверять наличие кэша, его свежесть и генерировать пути хранения файлов ▪ Правильно настроенный веб сервер может отдавать готовые HTML файлы очень быстро
  • 7.
    Кэширование данных воперативной памяти (Memcache, APC) ▪ Можно кэшировать как результаты запросов к БД, результат сложных вычислений, а так же часто используемые HTML блоки небольших размеров ▪ Memcache в основном используется для организации единого кэша между серверами ▪ APC помимо данных кэширует PHP код
  • 8.
    Кэширование на сторонеклиента ▪ Заголовок Expires говорит браузеру брать результат запроса из кэша до указанной даты Expires: Sun, 24 Jan 2013 20:59:20 GMT ▪ Результаты частых AJAX запросов можно сохранить в обычной переменной ▪ Склеивание JS, CSS и изображений в один файл чтобы минимизировать количество запросов к серверу
  • 9.
    Способы «оживления» страницы • Взависимости от Cookie при помощи JS показывать различные блоки (авторизован / не авторизован) • <script src="/comments.php?songid=12345"></script> • SSI: <!--#if expr="СТРАНИЦА ПЕСНИ" --> один вид рекламы <!--#elif expr="СТРАНИЦА ГРУППЫ" --> второй вид рекламы <!--#endif -->
  • 10.
    Спасибо за внимание! Судовольствием отвечу на Ваши вопросы!

Editor's Notes