Ускорение VirtueMart 2 благодаря гибкому кешированию с помощью плагина JotCache

"Все аспекты самостоятельного создания и продвижения сайтов
от практика с многолетним опытом." — блог Рудь Сергея
info@site-on.net
Заметка: активирована адаптивная версия сайта, которая автоматически подстраивается под небольшой размер Вашего браузера и скрывает некоторые детали сайта для удобства чтения. Приятного просмотра!
25.02.2014

Всем добрый день. 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 способа:

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

Допустим, в нашем шаблоне есть позиция с именем «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 >

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

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

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

GW fix JotCache

Для тех, кто столкнулся с подобными неприятностями, я выкладываю готовое решение.

Скачано 154 раз.

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

Заключение

Вот и всё, теперь VirtueMart лишён своего главного недостатка. Спасибо за внимание и до новых встреч, не забудьте подписаться на новые эксклюзивные статьи от Site on!

С уважением, .
Пожалуйста, оцените эту статью
Средняя оценка: 4.63 из 5 (проголосовало: 19)
Статья оказалась вам полезной? Подпишитесь, чтобы не пропустить новые!

Ваш email:
Вы можете помочь развитию проекта, сделав всего 1 клик:
Спасибо!
Пожалуйста, прокомментируйте, как Вам моя статья?
Имя:
Комментарий:

Если Вы хотите вставить код, пожалуйста, заключайте его в [code][/code]

Подписаться на новые комментарии:

E-mail:


Защита от спама: у треугольника три...
Ответ:
Подписаться на новые комментарии без комментирования - Email:
Защита от спама: у треугольника три...
Ответ:

27.02.2014 10:11:51 Борис:
Здравствуйте, Сергей!

Я использую модуль поиска по товарам от Virtuemart. Как его исключить из кэширования(шаг 5 вашей инструкции)?
27.02.2014 10:18:47 Борис отвечает:
кажется понял - опять через <jot> теги?
27.02.2014 10:43:15 Сергей отвечает:
Здравствйте, Борис. Да, через теги. Только не уверен, что есть смысл запрещать модуль поиска к кешированию, там и так кешировать нечего. А вот com_search из шага 5 лучше исключить из кеша.
27.02.2014 12:28:24 Борис отвечает:
Я из той же логики, что надо исключить com_search из кэша предположил, что и родной VM-модуль поиска товаров надо исключить из кэша.
Есть несколько вопросов:
1. Вы знаете как наличие конфликта скриптов влияет на позицию сайта в поисковой выдаче?
2. А как понять, какие настройки кэширования оптимальны? Вы говорите, что индивидуальный процесс. Как понять что кэширование настроено эффективно, золотая середина
3. Если кэширование будет включено по предложенному варианту, то например при добавлении нового товара он будет не виден, пока кэш не обновится?
27.02.2014 14:59:09 Сергей отвечает:
com_search - это компонент, а модуль есть модуль, это большая разница. При поиске модуль перебрасывает на страницу компонента. В самом же модуле кешировать и так нечего - это же просто строка для ввода.
1) Нет, и сомневаюсь что как-то влияет. Конечно, если Ваш сайт от этого не перестал работать.
2) Я подбераю методом проб и ошибок, не забывая про логику. Например, если Compress Cached Content не ломает ваш сайт, то ставьте его в положение ON. Также многое зависит от количества посетителей, просмотров и частоты обновления информации.

Можете сходить за детальными пояснениями на форум разработчика, он отвечает на такие вопросы.
3) Да. Товар будет доступен только для тех, кто знает прямую ссылку на него или на незакешированных страницах.

Вроде именно для таких случаев предусмотрена функция Recache, но я ей ещё не пользовался.
28.02.2014 12:22:29 Борис отвечает:
Добрый день, Сергей.

1. Заметил странный результат. В общих настройках вчера оставил кэширование отключено, а плагин работал. В итоге сегодня мне начальник сообщил, что в категориях товаров показываются только первые страница. Когда же нажимаешь вторую и последующие страницы категории, то всегда показываются товары с первого листа.
2. Ваш плагин GW fix JotCache без разницы каким по порядку ставить?
28.02.2014 12:43:33 Сергей отвечает:
Добрый день.
1) В общих настройках Joomla "стандартое кэширование" должно быть включено. Нужно отключить только стандартный плагин Джумла для кэша.

Кстати, сегодня узнал на практике такую особенность, что если вы будете очищать кеш, очищайте его не только в компоненте JotCache, но и в Сайт/Обслуживание.
2) Да, без разницы.
28.02.2014 13:32:50 Борис отвечает:
Заметил также такую неприятность. Если все настроить как вы описываете, то встроенный VM-модуль вывода случайных/новых/рекомендуемых товаров замораживается. То есть показываются всегда одни и те же товары. Как это вылечить?
28.02.2014 13:41:39 Сергей отвечает:
Шаг 6.
04.04.2014 19:01:00 Илья отвечает:
Добрый день, Сергей.

Странная проблема с установкой компонента. Пишет "Установка плагина успешно завершена", и чуть ниже "PLG_CRAWLER_XML_DESCRIPTION". Далее открываю Менеджер плагинов, и там собственно вижу только краулера, ни компонент, ни доп. плагины не устанавливаются. Такая проблема только с этим компонентом, Гугл по поводу JotCache молчит.

Вы не сталкивались ни с чем подобным во время установки и тестирования?
04.04.2014 19:04:01 Сергей отвечает:
Сталкивался, даже создал тему на сайте разработчика, но проблему решить не удалось. Скорее всего не подходит версия Joomla, она должна быть 2.5.14 и выше.
05.04.2014 10:05:54 Илья отвечает:
Да, вы были правы, обновился до 2.5.19, и компонент установился корректно. Спасибо.
05.04.2014 13:05:52 Сергей отвечает:
Рад, что помог. Удачи!
24.04.2014 10:39:37 Борис отвечает:
Сергей, здравствуйте. А есть ли ограничение на минимальную версию VirtueMart для JotCashe?
24.04.2014 15:25:47 Сергей отвечает:
Здравствуйте, Борис. Ограничений по компонентам нет, разве что нужно тестировать их поведение при включённом кеше.

Ответить на комментарий


06.04.2014 21:41:07 Илья:
Доброго времени, Сергей.

Подскажите, если не сложно.

Имею в шаблоне позицию для загрузки breadcrumbs:
<jdoc:include type="modules" name="breadcrumb" style="<?php echo $this->module_styles['breadcrumb']; ?>" />

По аналогии с вашим примером, обернул ее в тег jot:
<jot breadcrumb s style="<?php echo $this->module_styles['breadcrumb']; ?><jdoc:include type="modules" name="breadcrumb" style="<?php echo $this->module_styles['breadcrumb']; ?><jot breadcrumb e >" />

Но крошки продолжают кешироваться, и нормально отображаются только при полностью отключенном кешировании в настройках Joomla. ЧЯДНТ?
06.04.2014 21:55:11 Илья отвечает:
Точнее вот так сейчас в коде:

<jot breadcrumb s style="<?php echo $this->module_styles['breadcrumb']; ?>><jdoc:include type="modules" name="breadcrumb" style="<?php echo $this->module_styles['breadcrumb']; ?>" /><jot breadcrumb e >
07.04.2014 08:49:42 Сергей отвечает:
Попробуйте отключить кеширование в настройках самого модуля breadcrumb.
07.04.2014 09:04:59 Илья отвечает:
Спасибо, помогло.

Пошел по сложному пути) забыв про простой)

Ответить на комментарий


14.04.2014 03:18:52 Sashka:
После установки и настройки весь сайт и админку показывает как HTML-текст без форматирования! Удалить компонент немогу! Что делать что-б вернуть сайт????
14.04.2014 09:22:47 Сергей отвечает:
Какая у вас версия Джумлы? Отключите кеширование на сайте, выключите все плагины JotCache, очистите кеш в Джумле, очистите кеш в браузере, перезапустите браузер. Если не поможет, опишите проблему подробнее или восстановите сайт из резервной копии.
Таких проблем не у кого не наблюдалось, возможно дело не в этом компоненте?
14.04.2014 13:58:50 Sashka отвечает:
Сергей Joomla 2.5.19, ничего не могу отключить так как вся админка это текст на белом фоне! Можно ли как то отключить компонент просто в конфигурационных файлах Джумлы?
14.04.2014 17:22:53 Сергей отвечает:
В базе данных должно храниться значение опубликован плагин или нет, измените это значение на нет. Подсказать где именно не могу, у меня сейчас технические неполадки.
14.04.2014 21:32:56 Sashka отвечает:
Поотключал плагины кеширования и JOT и стандартный админка вообще не отображается!

Ответить на комментарий


24.04.2014 10:29:49 Ян:
Как настроить Jotcache crawler на Centos ?
24.04.2014 10:30:23 Ян отвечает:
Как настроить Jotcache crawler на Centos ?

Ответить на комментарий


04.05.2014 12:28:57 Николай:
Сергей поставил JotCache 4.1.2 на связку joomla 2.5 и virtuemart.
Все отлично работает, на всех страницах и всех позициях, кроме главной страницы, а именно на главной странице кешируется стандартная корзина вирта. Помогите или подскажите как от этого избавиться
04.05.2014 13:10:53 Сергей отвечает:
Для этого я использую Шаг 6 из данной статьи. У меня тоже стандартная корзина на главной, всё ок - не кешируется.
04.05.2014 15:38:37 Николай отвечает:
</div>
у меня вот такой код

<?php if ($view->containsModules('position-6', 'position-8', 'position-3')) : ?>
<div class="art-layout-cell art-sidebar2">
<jot position-6 s ><?php echo $view->position('position-6', 'art-block'); ?><jot position-6 e >
<?php echo $view->position('position-8', 'art-block'); ?>
<?php echo $view->position('position-3', 'art-block'); ?>


Если не прописывать стиль не кешируется, но слетает само отображение корзины (ламается стиль так как его нет), если ставить style='art-block', корзина на главной начинает кешироваться на остальных все нормально
04.05.2014 20:22:05 Николай отвечает:
Сергей, самое интересное, что стандартный модуль корзины кешируется только на страницах с размещенными материалами (статьи и т.п.). На страницах вирта модуль корзины нормально отрабатывает без кеширования.
04.05.2014 22:09:36 Сергей отвечает:
К сожалению, сейчас нет под рукой VM + JotCache, чтобы потестировать. Вы пробовали делать так: <jot position-6 s style="art-block" ><?php echo $view->position('position-6', 'art-block'); ?><jot position-6 e >
?
Либо попробуйте сделать так, вместо:
<jot position-6 s ><?php echo $view->position('position-6', 'art-block'); ?><jot position-6 e >
Вставьте это:
<jot position-6 s style="art-block" ><jdoc:include type="modules" name="position-6" style="art-block" /><jot position-6 e >
04.05.2014 22:21:03 Николай отвечает:
Сергей, по первому варианту пробовал, на страницах с статьями, модуль корзины начинает кешироваться, второй вариант попробую, отпишусь. на данный момент, проблему решил путем запрета кеширования позиции модуля и запрета кеширования компонента com_content

Ответить на комментарий


07.10.2014 12:51:54 Денис:
Добрый день! Подскажите после установки этого компонента и включения всех плагинов - сайт перестает загружаться и отдает 500-ю ошибку. Установлена Joomla 3.2, версия JotCashe 5, стандартное кеширование включено, плагин jotcashe отображается последним. При отключении плагина jotmarker сайт начинает работать, но результата в улучшении скорости загрузки нет, даже наоборот. Можете подсказать в чем может быть проблема?

Ответить на комментарий


12.10.2014 17:11:43 Константин:
Спасибо!

Ответить на комментарий


14.11.2014 13:40:41 Александр:
Поставил JotCache - все работает, но при переходе в корзину отображается не более 3 товаров. Правда при перезагрузке корзины начинает отображаться полный список.

Ответить на комментарий


01.12.2014 21:12:07 Мирослав:
Установил, настроил, все работает и дает толк. У меня для увеличения картинок в карточке товара используется модуль Magic Zoom Plus. Так вот он работает нормально при заходе на страничку товара из сайта. При этом сам модуль я переместил в некешируемую позицию. Если же заход был из поисковика, то включается стандартный модуль отображения картинок Virtuemart вместо этого. В таком виде страничка попадает в кеш. Помогите решить!

Ответить на комментарий


02.12.2014 15:49:05 Мирослав:
Еще вопрос - в какой папке плагин хранит кешированные файлы?

Ответить на комментарий


18.12.2014 08:16:20 Бригада:
Здравствуйте, Сергей!

Подскажите пожалуйста как мне обернуть position-33, по разному пробовал не получается
:(
сам код:


<div class="header">
<?php echo $view->position('position-30', 'nostyle'); ?>
<?php echo $view->positions(array('position-31' => 20, 'position-32' => 60, 'position-33' => 20), 'nostyle'); ?>

18.12.2014 19:41:13 Сергей отвечает:
Так не сказать, нужно смотреть что происходит в методе positions() объекта $view. Либо убрать из массива position-33 и создать её стандартными средствами джумла:

<?php echo $view->positions(array('position-31' => 20, 'position-32' => 60), 'nostyle'); ?>
<jdoc:include type="modules" name="position-33" style="xhtml" />

А дальше всё как в статье.

Ответить на комментарий


17.05.2015 11:37:18 Валера:
Мне вот интересно, можно ли тегом jot исключить допустим вывод сортировки товаров или показ количества товаров в категории?

Ответить на комментарий


13.09.2015 09:43:43 Александр:
Здравствуйте, я не могу закачать данный плагин. И на оф. сайте такая же проблемма. Может есть какая то альтернатива для выборочного кеширования, стандартные плагины не подойдут. Joomla 3.4.4 jshop 4.61. Спасибо

Ответить на комментарий

Использую для работы
Мои расширения
Свежие статьи
Рекомендую
Горячо обсуждаемые
Подписка
  • Следовать в twitter:
  • Подписаться по RSS:
  • Подписаться по E-mail:
  • Следить ВКонтакте:
  • Следить на Facebook:
Пользовательское соглашение об условиях использования сайта и Политика конфиденциальности
Перепечатывание или копирование материалов сайта (текста, изображений и другого содержимого) для их публичного или коммерческого использования в сети Интернет, либо в печатных изданиях строго запрещены. При нарушении данного правила, с нашей стороны будут предприняты соответствующие меры, вплоть до судебной жалобы.
© site-on.net
Шрифт: +стандартно-