Оптимизация Joomla 1.5
05.06.2009 19:25

Наверняка уже многие слышали о медленной работе Joomla!, одной из самых популярных бесплатных CMS. Равно как и о ее сильной уязвимости для атак хакеров. Благодаря простоте создания расширений для Joomla!, сейчас доступно несколько (десятков) тысяч разнообразных модулей, компонентов и расширений, позволяющих установить на сайт практически произвольный функционал: от полноценной социальной сети до интернет-магазина.

Естественно, что у такой простоты есть и обратная сторона: большинство расширений создаются без учета требований высокой производительности и какой-либо оглядки на мощности конечных серверов, очень часто даже не выделенных или виртуальных, а расположенных на общем хостинге. Разработка бесплатных решений оборачивается 100-500% замедлением в скорости загрузки сайта. Давайте разбираться, как с этим можно бороться.

Серверная часть

Для начала посмотрим, что можно сделать с серверной производительностью. Для исследования использовалась стандартная сборка Joomla!, но даже в такой комплектации на отдельном сервере время создания страницы занимало 0,312с (замер времени ответа производился с помощью curl, интерфейс к которому выложен на webo.in). Это не очень много, но в условиях виртуального хостинга может возрасти многократно, даже на изначально хорошо оптимизированных окружениях.

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

Кэширование на стороне сервера

Включение встроенного кэширования в Joomla! 1.5 сократило время ответа тестируемого сервера примерно на 30% (на 0,107с). Прекрасно понятно, что в большинстве случаев оно будет практически бесполезно: если необходимо сократить время создания страниц на порядок, то нужны более кардинальные методы.

В качестве одного из кэширующих решений может использоваться и Web Optimizer: встроенное кэширование HTML-документов позволяет отдавать их сразу в том виде, в котором они получаются системой после всех запросов к базе. При этом, естественно, практически все эти запросы не осуществляются. Данное кэширование («монолитное») подойдет только в тех случаях, когда внешние страницы у Joomla! меняются относительно редко.

Если просто включить Web Optimizer в процесс создания страниц, то время обработки документа возрастет незначительно (после создания всех кэширующих файлов на 0,006с или 3% на тестовом сервере). Дополнительно включив HTML-кэширование в Web Optimizer, можно сократить время отдачи документа до 0,08с (почти в 4 раза по сравнению с исходным временем создания страницы). Сразу хочу отметить, что установка вроде аналогичного по функциональности дополнения Content Static визуально на производительности никак не отразилась.

Очевидно, что более грамотным будет кэшировать отдельные модули на странице, оставляя нужные места (или как их любят называть в шаблонных движках — заглушки) динамическими. Однако данное решение требует существенного вмешательства в алгоритм работы самой CMS. Вполне возможно, что Joomla Performance Booster работает именно по такому принципу (пока протестировать его на производительность не удается: дополнение платное и купить его из России несколько проблематично в связи с оплатой только через PayPal или MoneyBookers).

Кэширование запросов к базе данных

К серверному кэшированию можно подойти и с другой стороны: ограничить число запросов к базе данных, обычно именно эта часть вызывает наиболее серьезную «утечку» производительности. Для Joomla! существует расширение, позволяющее закэшировать все (или почти все) запросы к базе. Тут стоит понимать, что база данных сама по себе может работать достаточно быстро, и данное решение будет эффективно только в том случае, если восстановление закэшированного значения выборки на порядок (или хотя бы в разы) быстрее, чем осуществление самой выборки (например, 1 мс против 10 мс). В противном случае прироста производительности не появится.

Дополнение Query Cache позволяет использовать как файловую систему, так и популярные кэширующие подсистемы (APC, Memcache и др.) для сохранения выполненных запросов. Однако в случае только файловой системы «завести» кэш не удалось.

Клиентская часть

Для оценки эффективности решений для клиентской оптимизации будем использовать зарекомендовавший (и относительно беспристрастный :) YSlow.

«Чистая» система

«Чистая» установка Joomla! 1.5 набрала 65 баллов из 100. Вполне приемлемо. Стоит понимать, что если на систему просто «навернуть» десяток модулей и компонентов, то оценка резко ухудшится до 30-40.

Следующий этап: архивирование

В Joomla! есть встроенный gzip. Однако, во-первых, он работает через PHP, во-вторых только для HTML-файлов. Грустно, что и отразилось на оценке: она поднялась только до 67.

CssJsCompress

Довольно известное дополнение, позволяющее объединять CSS- и JS-файлы. Однако, не добавляет к ним всех кэширующих заголовков и сжатия, что и отразилось на результате: всего 72 балла по YSlow. В самой Joomla! gzip при этом был включен. Дополнение CSS/JS Cache не удалось заставить корректно работать.

Smart Optimizer

Далее был протестирован Smart Optimizer (как отдельное PHP-приложение) — по характеру работы полностью аналогичный известному Minify (дополнение Minify4Joomla «завести» не удалось). Установка у него достаточно сложная для непрофессионала, к тому же приходится править шаблоны вручную, нет возможности объединять файлы из разных директорий. Однако все остальное на высоте: оценка поднялась до 85. В самой Joomla! gzip при этом был включен.

Web Optimizer

Web Optimizer (как отдельное PHP-приложение), естественно, устанавливается в «два клика» и обладает более мощным клиентским арсеналом: при отключенном сжатии в самой Joomla! оценка поднялась до 93 (с 65 изначально). Думаю, тут уже дополнительных комментариев не нужно.

Заключение

На данный момент для Joomla! 1.5 не удалось найти более мощного бесплатного решения для оптимизации производительности, чем Web Optimizer. PHP Speedy доступен пока только для Joomla! 1.0, а Joomla Performance Booster является платным (если удастся оформить перевод денег, то скоро будет выложен и его обзор).

В зависимости от конкретных задач и серверного окружения скорость работы практически произвольного сайта на Joomla! может быть ускорена на порядок (имеется в виду серверное + клиентское ускорение). Возможно, в части производительности Joomla! и уступает Drupal, однако при правильном использовании существующих инструментов разрыв этот можно сократить до минимума.

 

Комментарии 

 
+2 #1 exopper 2009-12-13 12:02 Спасибо за статью!
Вот тоже юзаю WO, но при включенном серверном кэшировании и включенной опции "не проверять время создания кэша" тестирую время ожидания ответа сервера на webo.in - и оно такое же, как и при выключенных этих опциях! Смотрю в папку кэш - дата создания не меняется, вывод - файлы на отправку каждый раз WO не генерит. В чем дело может быть?

P.S. при включенном нативном кэше жумлы время ожидания ответа сервера при повторных запросах = ~80 мс.
Цитировать
 
 
0 #2 Игорь 2009-12-28 18:15 Никакого реального ускорения не обнаружил, это БОЛЬШЕ рекламный трюк для заработка! Скажите, много людей сейчас выходят через модем 28.8?
P.S. Программист 12 лет стажа.
Цитировать
 
 
+2 #3 exopper 2010-01-01 14:40 Цитирую Игорь:
Никакого реального ускорения не обнаружил, это БОЛЬШЕ рекламный трюк для заработка! Скажите, много людей сейчас выходят через модем 28.8?
P.S. Программист 12 лет стажа.


Ну кагбэ если у вас сайт с 10 запросами к серверу БД и сервак сильный, свой или VDS - то, по большому счету, больше париться, чем выигрывать. Но а если сайт на бесплатной joomla! с посещением более 1к уников в день на виртуальном хостинге? Попробуете войти в книгу рекордов? =) Вот, почитайте книгу, станет сразу все понятно:
http://speedupyourwebsite.ru/books/speed-up-your-website/online/
Цитировать
 
 
+2 #4 Александр 2010-02-17 19:07 Поставил с настройками по дефаулту..
На глаз.. раза в 2-3 время загрузки страницы было уменьшено. Если в дальнейшем глюков не будет - это действительно стоящая весчь!
Пока не разобрался - чем бесплатный отличается от платного…
Цитировать
 
 
+1 #5 Дмитрий 2010-02-20 22:54 У меня посещалка 7.000 уников в день. Сайт на платном хостинге Дипхост, движок Joomla. Скажите, мне включить кэширование? Если да, то какой промежуток лучше установить? (там стоит 15 минут по умолчанию). Сайт обновляется раз в неделю, да и то по 1-2 статье.
Если что-нибудь еще посоветуете, будет круто. Вашу статью почитал, но так как я не шарю во всех этих штуках, то мне лучше по совету что-нито взять, установить и нигде не копаться.
Спасибо
Цитировать
 
 
-12 #6 Вася 2010-03-01 17:14 Всем привет! Цитировать
 
 
0 #7 Алексей 2010-04-27 16:17 http://www.allbrows.ru Сайт о интернет браузерах. Но время отклика от сервера 1055 м/с очень долго. в чем может быть причина? Цитировать
 
 
0 #8 Дмитрий 2010-07-23 10:47 Поставил эту чудо весчь и получил 403, причём, не пускает даже в админку ( Цитировать
 
 
0 #9 Бац 2010-11-02 15:48 Цитирую Дмитрий:
Поставил эту чудо весчь и получил 403, причём, не пускает даже в админку (

Вот поэтому нужно тестировать на локальной машине или делать резервное копирование.
Цитировать
 
 
0 #10 Сергей 2011-02-08 18:10 Подскажите, современная Webo Site для Joomla 1.5, кажется платная или я неверно понял лицензию? Цитировать
 

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

Защитный код
Обновить

На сайте

Сейчас 15 гостей онлайн
создание расширений Joomla, сделайте Ваш сайт уникальным