Если у сайта относительно низкая активность, вы не должны кэшировать любую страницу.Вы кешируете из-за проблем с производительностью, а проблемы с производительностью возникают из-за того, что у вас слишком много данных для запросов, слишком много пользователей или, что еще хуже, в обеих этих ситуациях одновременно.
Прежде чем вы даже подумаете о кешировании, первое, что вы делаете, просматриваете ваше приложение для запросов, которые занимают больше всего времени.Не самые медленные запросы, но те запросы, которые ваше приложение тратит на наибольшее время.То есть, если у вас есть запрос A, который выполняется 10 раз при 1500 мс, и запрос B, который выполняется 5000 раз при 250 мс, вы сначала работаете над оптимизацией B.
На самом деле довольно просто grep
через production.log
иизвлекать время рендеринга и URL, чтобы объединить их в простой отчет.Вы даже можете сделать это в режиме реального времени, если хотите.
После того, как вы определили проблемный запрос, вы продолжаете разбирать, что он делает для обслуживания запроса.Во-первых, нужно искать любые запросы, которые можно объединить, используя энергичную загрузку или забегая вперед, чтобы предугадать, что вам нужно.Следующее - убедиться, что вы не загружаете неиспользуемые данные.
Сколько раз вы будете видеть код для перечисления пользователей, и он загружает 50 КБ на человека биографических данных, их ручек в Facebook и Twitterбуквально все о них, и все, что вы используете, - это их имя.Используйте connection.select_rows
, когда вам не нужны модели.
Следующий шаг - посмотреть, какие запросы вы выполняете и как они не выполняются.Убедитесь, что все ваши индексы установлены правильно и используются.Убедитесь, что вы не выполняете сложные JOIN
операции, которые могут быть решены с помощью некоторой тактической ненормализации.
Посмотрите, какие данные хранятся в вашем приложении, и попробуйте найти вещи, которыемогут быть удалены из вашей производственной базы данных и храниться в другом месте.Регулярно отключайте данные, когда они больше не нужны, сохраняйте их в отдельной базе данных, если вам нужно.
Затем перейдите и посмотрите, как настроен ваш сервер базы данных.У него достаточно большие буферы?Это на аппаратном обеспечении, которое можно было бы обновить до большего объема памяти по номинальной стоимости?Слишком много людей используют полностью ненастроенный сервер баз данных и с несколькими простыми настройками они могут получить десятикратное увеличение производительности.
Если и только если у вас все еще есть проблемы с производительностью, то выВозможно, вы захотите рассмотреть кеширование.
Вы знаете, почему вы не кэшируете в первую очередь?Это потому, что когда вы что-то кешируете, кэшированные данные сразу устаревают.Если части вашего приложения используют эти данные в предположении, что они всегда актуальны, у вас будут проблемы.Если вы не истечете срок действия этого кэша, когда данные действительно изменятся, у вас будут проблемы.Если вы кешируете данные и никогда не используете их снова, вы просто забиваете кеш и у вас будут проблемы.В основном, у вас будет много проблем, когда вы используете кеширование, поэтому это последнее средство.