Кеширование данных при разработке сайта на PHP — что это такое?

Пару раз слышал про такое понятие как кеширование применительно к разработке сайтов, движков и т.д. Я не могу понять о чем именно идет речь. Идет ли речь о кешировании именно страниц? Т.е. есть динамические страницы (данные для которых берутся из бд), но содержимое страниц какое-то время не меняется и соответственно эти данные можно не брать каждый раз из базы, а брать из кеша. Правильно я понимаю? Но что тогда в данном случае является КЕШЕМ? Сами браузеры имеют кеширование, но ведь речь не об этом.
Плюс есть еще одна ситуация: например на каждой странице сайта выводится вертикальное меню услуг, большое многоуровневое меню, которое тоже берется из базы. Меню на всех страницах одно. И каждый раз при переходах внутри сайта, делать запросы к бд, чтобы получить это меню - не очень рационально, ведь меню то остается неизменным. Соответственно, если я правильно понимаю, меню тоже нужно кешировать и не лазить каждый раз в бд, чтобы вывести его. Я правильно рассуждаю или нет? Именно об этом идет речь, когда говорят о кешировании в движках?
Если это так, то каким образом реализуется это кеширование на PHP?
  • Вопрос задан
  • 4232 просмотра
Решения вопроса 4
denver
@denver
Кэшировать нужно то что тормозит И меняется намного реже чем показывается. Если ничего не тормозит, либо кэшируются частоизменяющиеся данные - использование кэширования может затормозить больше чем неиспользование.

Если сайт совсем не меняется (визитка, портфолио), то можно вообще закэшировать весь результирующий HTML (с помощью ob_start() ob_getcontents(), либо это поручить varnish). Чаще же всего содержимое страниц нестатично и нужно кэшировать блоки. Чаще всего это блоки HTML (как у вас меню). Иногда это даже данные (еженочная аггрегация, топ лучших чего-то).

Здесь описаны некоторые частоиспользуемые типы хранилища:
itechtalks.blogspot.com/2011/09/php-data-caching-t...
(там еще забыли про еще apc, redis, memcache и пр.)

Из совсем других типов есть еще mysql query cache - кэширование результатов запросов, но это редко бывает полезно. Есть еще opcode cache (php accelerators) это просто полезно включить чтобы php файлы парсились реже.
Ответ написан
Комментировать
Думаете Вы в правильном направлении.
Замечание: - различают серверное и клиентское кэширование. Это разные вещи.

В PHP кэширование можно легко организовать при помощи файлов и memcached. В файлы легко заносить куски html, или массивы. В memcached хорошо подходит для сложных данных.
Ответ написан
nazarpc
@nazarpc
Open Source enthusiast
Вы верно мыслите. Обычно в кэш кладут часто используемые данные, и данные, которые являются результатом вычислений (или запросы к сторонним API), которые значительно влияют на скорость работы сайта. Чтение известного файла из файловой системы или данных из памяти в большинстве случаев быстрее выборки из БД, хотя она часто используемые запросы кэширует сама.

Кэш страниц целиком имеет смысл для сайтов где содержимое меняется редко, чаще кэшируют определённые данные.

Для хранения кэша используют файловую систему, APC, Memcached
Ответ написан
Комментировать
viktorvsk
@viktorvsk
Мыслите правильно.

Заниматься преждевременной оптимизацией не всегда правильно.

Кэширование состоит в том, что что-то что используется чаще, чем обновляется - фиксируется на определенное время. В браузере свой кэш. В ОС это может делаться как на уровне оперативной памяти, так и на уровне файловой системы. Оперативная память, конечно же, на порядок (порядки?) быстрее в общем случае.

На заметку: в вебе делают такую удобную штуку, как ETag headers (www.w3.org/Protocols/rfc2616/rfc2616-sec14.html), которая используется в системах кеширования (как минимум, в Rails (не php) )
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы