Динамическое кеширование

9.8/10 оценка (5 голосов)

Эта статья актуальна только для версии 1.6 и ниже.

Скорость работы сайта очень важна. Сайт, который быстро грузится вызывает больше доверия у пользователей нежели тот, где страницу приходится долго ждать. Некоторые посетители даже не дожидаются окончания загрузки таких сайтов и уходят в поисках другого ресурса.

Zoo, как и все в этом мире, не лишено недостатков. Архитектура компонента местами не оптимизирована, а данные хранятся как попало. Если вы сделаете каталог товаров в 2–3 тысячи позиций, где каждый элемент будет иметь по 20 свойств, то ваш сайт упадет при 10 одновременных посещениях.

Поэтому мы решили повысить быстродействие загрузки страниц сайта. Для этого мы использовали динамическое кеширование на основе Joomla API.

Что такое кеширование?

Кеш — это временное хранилище промежуточных данных, которые часто используются в приложении. Но чтобы получить эти данные необходимо затратить относительно большое количество серверных ресурсов.

В итоге технология сводиться к очень простому алгоритму. При первой загрузке генерируются отдельные HTML фрагменты «тяжелых» частей сайта. Они сохраняются и затем используются при последующих загрузках. Таким образом увеличивается скорость загрузки страницы и общая производительность сайта.

Как реализовано кеширование в JBZoo?

В «коробочном» варианте Zoo не предусмотрено никакого кеширования (за исключением некоторых элементов, вроде googlemap). Вывод компонента (страница) не кешируется, а именно на него уходит больше всего времени, особенно если у вас сложный и большой каталог. Эта та самая обратная сторона медали гибкости CCK.

В JBZoo мы добавили кеширование статичного контента, что позволяет ускорить загрузку страниц в несколько раз.

Как это работает?

Практически любую страницу можно разделить на несколько блоков. Например, макет FULL содержит в себе текстовую часть, в которой определены все позиции и комментарии пользователей. А макет страницы категории содержит блок элементов, список подкатегорий и т. д. Каждый из этих блоков имеет свой уникальный cacheId, который зависит от даты последнего изменения (если такая есть), либо от количества элементов, что удобно для блоков со списками, например комментарии.

При первой загрузке сохраняются HTML-фрагменты страницы в кеш, а для всех последующих просмотров загрузка будет происходить из кеша. Если администратор или любой другой привилегированный пользователь изменяет материал, то соответственно изменится и cacheId блоков, что заставит Joomla сбросить кеш. Таким образом, нет необходимости ручной очистки всего кеша сайта ради одной страницы — обновления будут происходить мгновенно.

Какие основные преимущества?

  • Разделив страницу на блоки, появляется возможность сбросить кеш только для той части страницы, которая обновилась. Все происходит в фоне.
  • Нет необходимости ручной очистки хранилища после обновления контента.
  • В хранилище создаются отдельные группы для разных страниц, например com_zoo_blog, com_zoo_category, com_zoo_comments_list, com_zoo_tag, com_zoo_frontpage и т. д. Таким образом можно очистить кеш только для определенной части сайта.
  • Кеширование реализовано с помощью Joomla API, что дает централизованное управление через «Общие настройки» и работу с различными драйверами (файл, apc, memcache и т. д.)

Есть возможность управления кешированием на сайте?

Да. Это можно сделать в общих настройках Joomla. Для удобства мы сделали так, что вместе с включением и выключением кеша в самой Joomla срабатывает и соответственно кеш JBZoo. Время кеширования также задается в настройках Joomla.

P.S: Приобретайте JBZoo и наслаждайтесь скоростью работы своего сайта, но помните, что даже гибкое кеширование — это крайность, которая не заменит эффективное программирование.

 

Кэширование

У меня остались вопросы, где я могу их задать?

Вы можете обратиться на наш специальный форум техподдержки JBZoo. Если у вас нет активного аккаунта со знаком «плюс» в тарифном плане, то вы можете задать свой вопрос в одном из этих разделов или на любой из наших контактов. Форум специально предназначен для JBZoo, приоритет и скорость ответа там выше.