На время проведения реконструкции сайт переведён в режим "ТОЛЬКО ЧТЕНИЕ" (Read only). Приносим свои извинения!
MaxHub
Полезности по Maxsite CMS

Как уменьшить количество запросов в базу данных?

Вопросы-ответы / 2 ноября 2015

Видел на некоторых сайтах, на главной всего 1 запрос к базе, а у меня целых 5. Как можно это исправить?

Комментариев: 9
  1. Сергей, есть один относительно простой вариант - настроить правильную работу кеширования на сайте. Вот на приложенном скриншоте сразу видно, что кеширование не включено никакое (для демо-сайта это пока нормально).

    Как минимум, нужно на странице Настроек шаблона найти таб «Главная (units)» и задать свои настройки опции «Время кеширования главной страницы»:

    cache-time.png

  2. Или запустить плагин sm_profiler, найти проблемное место и исправить.

  3. Включить кэширование запросов в database.php $db['default']['cache_on'] = TRUE;

  4. спасибо

  5. Включить кэширование запросов в database.php $db['default']['cache_on'] = TRUE;

    А как сбрасывать этот кэш, при необходимости? Например, если новые материалы появились.

  6. А как сбрасывать этот кэш, при необходимости?

    В консоли кнопка СБРОСИТЬ КЭШ СИСТЕМЫ.

    По своему опыту могу сказать, что большое количество запросов не всегда плохо. Если запросы оптимизированы, то скорость их работы достаточно высока и не особо влияет на скорость сайта. Как, например, в самом начале этой записи на картинке - 18 SQL и 0.15 S - по-моему, уменьшать здесь количество запросов ни к чему.

  7. Спасибо, Сергей!

    Вопрос: кэширование, которое включено в database.php $db['default']['cache_on'] = TRUE;, чем откличается от кэширования, которое в шаблоне включается, выборочно? :

    #добавляем в кэш
    mso_add_cache($home_cache_key, ob_get_flush(), $home_cache_time * 60);
    # используем кэширование
    $home_cache_time = (int) mso_get_option('home_cache_time', 'templates', 0);
    $home_cache_key = getinfo('template') . '-' .  __FILE__ . '-' . mso_current_paged() . '-' . $UNIT_NUM;
  8. if ($home_cache_time > 0 and $k = mso_get_cache($home_cache_key) ) echo $k; // да есть в кэше
  9. Екатерина, если по-простому, то mso_add_cache - это кэширование на уровне maxsite (например результатов работы тяжелых скриптов). database.php $db['default']['cache_on'] = TRUE - кеширование на уровне Code Igniter, в данном случае кэширование результатов выборки из БД. Иными словами, вместо того, чтобы обращаться к БД, CI идет в папку на сервере и ищет там закэшированый результат запроса -> если есть, возвращает его, нет - делает запрос.

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