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 -->