Всем добрый день. Joomla + VirtueMart – популярная связка для создания интернет-магазинов, которая при определённых обстоятельствах (настраиваемые поля, дополнительные модули и тд.) может создавать заметную нагрузку на сервер, и, как следствие, приводить к очень медленной загрузке страниц.

Виною этому служит компонент VirtueMart и его программные особенности. Несмотря на этот недостаток, VirtueMart считается мощным комбайном электронной коммерции и продолжает активно улучшаться и использоваться для создания интернет-магазинов по всему миру.

VirtueMart2 speed up

Как же ускорить VirtueMart и снизить нагрузку на сервер?

Помимо клиентской оптимизации (большой спектр работ, включая отложенную загрузку элементов), шаблона Joomla, наиболее простым и результативным способом будет включение кеширования на стороне сервера (Сайт/Общие настройки/вкладка Система):

кеш в Joomla

Однако здесь нас ждёт большой подводный валун: у вас начнёт кешироваться абсолютно весь сайт (front-end), включая страницы корзины и модуль корзины.

(кто знает принцип работы серверного кеширования, могут пропустить следующие 2 абзаца)

Чем это чревато? Представим, что вы выставили время жизни кеша 3 дня и включили его. В это время покупатель добавил товар в корзину (кокосовое молоко), походил по другим страницам сайта, затем зашёл в корзину, оформил заказ на кокосовое молоко и ушёл с сайта.

После этого заходит на сайт новый покупатель, он ещё ничего не подозревает. Гуляет по тем же страницам, что и предыдущий… Вдруг замечает, что у него уже добавлен товар (как ни странно, кокосовое молоко) в модуле корзины. Жмёт удалить этот товар – и товар удалён, отлично! Добавляет в корзину нужные ему товары (пряники и лимон), переходит к оформлению заказа (страница корзины). А вот здесь его одолевает паника – в корзине нет ни одного его товара, зато снова появилось кокосовое молоко, которое он уже удалял (удалял через модуль или через саму корзину – не важно).

И это замкнутый круг, пока срок кеша этих страниц не истечёт (3 дня), а потом снова всё повториться.

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

JotCache. Введение

JotCache – бесплатный плагин для Joomla, позволяющий настраивать кеширование на сайте с грандиозной гибкостью, имеет множество полезных опций, например, «сжать страницу перед кешированием» и прочих. Имеет награды, среди которых «Выбор сообщества». Хочу заметить любопытный факт, что разработчик плагина знает о проблемах VM, и в своей документации показывает настройки на его примере.

После включения данного плагина – сайты буквально летают даже на дешёвом хостинге!

Установка и настройка

Шаг 1. Отключаем (если был включён) стандартный плагин кеширования: «Система - Кэш». Очищаем (если есть) весь кеш (Сайт/Обслуживание).

Шаг 2. Включаем глобальное кеширование Джумлы: Сайт/Общие настройки/вкладка Система/ Кэш: стандартное кэширование, Обработчик кэширования: файл.

Шаг 3. Скачиваем архив и устанавливаем стандартными средствами Джумла. У вас должны установиться компонент JotCache, плагин JotCache и ещё 3 дополнительных плагина (JotMarker, Recache, Crawler).

Шаг 4. Заходим в настройки плагина «JotCache» и придерживаемся моих инструкций:

настройки

Обратите внимание, плагин JotCache должен быть последним плагином по порядку (среди системных).

Рекомендуемые настройки:

Browser caching: NO, Compress Cached Content: NO, Mark Caching: NO, Cache Auto Clean: 20, Autoclean Mode: Fast, Clean Log: NO.

Однако это не значит, что их нельзя настроить по-другому. Настройка кеширования сайта – индивидуальная процедура.

Шаг 5. Заходим в настройки компонента JotCache, нам необходимо исключить страницы корзины и, например, поиска. Для этого нажимаем на «URL Exclude», ставим галочки напротив тех компонентов, которые мы хотим исключить из кеша:

URL Exclude

Вы можете исключить компонент целиком, либо задать конкретные параметры query string (строка запроса), а также конкретные views страницы (шаблоны отображения: cart, user, askquestion и тд.).

Шаг 6. Исключим из кеширования модуль корзины. JotCache не позволяет исключать именно модули, но он позволяет исключать из кеширования позиции модулей. По сути, это вообще не уменьшает гибкость.

Для того чтобы исключить (запретить) кеширование позиции есть 2 способа:

  • Через настройки компонента: кнопка «Position Exclude», дальше расставляем галочки. У меня этот способ не сработал, причины я так и не выяснил;
  • Через специальный тег <jot>, в который нужно обернуть вывод позиции в файлах шаблона.

Нельзя использовать оба способа одновременно! Остановимся на втором способе подробнее.

Допустим, в нашем шаблоне есть позиция с именем «lefttwo»:

<jdoc:include type="modules" name="lefttwo" style="xhtml" />

Для того чтобы исключить её из кеширования, нужно обернуть её вот так:

<jot lefttwo s style="xhtml" ><jdoc:include type="modules" name="lefttwo" style="xhtml" /><jot lefttwo e >

Уверен, вы справитесь по аналогии, поэтому кратко:

  • в теге <jot> необходимо обязательно указывать тот же style, что указан в позиции.
  • Никаких закрывающих слешей не нужно.
  • Синтаксис: <jot название_позиции s/e(start или end) style="значение"(если это старт) >

Шаг 7. И снова подводные камни. В работе JotCache мною был обнаружен следующий баг: на страницах, исключённых с помощью «URL Exclude», теги <jot> не обрабатываются плагином (что логично) и попадают в исходный код, тем самым создают новые узлы в DOM дереве. Это может привести к непредвиденным последствиям вёрстки вашего HTML + CSS + JS макета сайта.

У меня возникала ситуация, когда из-за тега <jot> менялась последовательность родственных селекторов первого уровня вложенности, из-за чего шаблон ломался. Поэтому пришлось написать простенький плагин, который убирает теги <jot>, если находит их на странице.

Устанавливаем плагин как обычно, активируем, готово! Если вы перестанете использовать JotCache, то не забудьте отключить и этот плагин.

{

}