| Оптимизация Joomla 1.5 |
| 05.06.2009 19:25 | |||
|
Наверняка уже многие слышали о медленной работе , одной из самых популярных бесплатных CMS. Равно как и о ее сильной уязвимости для атак хакеров. Благодаря простоте создания расширений для Joomla!, сейчас доступно несколько (десятков) тысяч разнообразных модулей, компонентов и расширений, позволяющих установить на сайт практически произвольный функционал: от полноценной социальной сети до интернет-магазина. Естественно, что у такой простоты есть и обратная сторона: большинство расширений создаются без учета требований высокой производительности и какой-либо оглядки на мощности конечных серверов, очень часто даже не выделенных или виртуальных, а расположенных на общем хостинге. Разработка бесплатных решений оборачивается 100-500% замедлением в скорости загрузки сайта. Давайте разбираться, как с этим можно бороться. Серверная частьДля начала посмотрим, что можно сделать с серверной производительностью. Для исследования использовалась стандартная сборка Joomla!, но даже в такой комплектации на отдельном сервере время создания страницы занимало 0,312с (замер времени ответа производился с помощью Встроенное кэширование в Joomla! 1.5 работает достаточно хорошо и позволяет сэкономить существенное время при создании страницы. Однако нужно понимать, что оно может быть применимо далеко не для всякой системы. В случае статичных новостных сайтов и небольших интернет-магазинов кэширование может помочь, но для социальных сетей с активным добавлением новых материалов и их комментированием оно точно не подойдет. Кэширование на стороне сервераВключение встроенного кэширования в Joomla! 1.5 сократило время ответа тестируемого сервера примерно на 30% (на 0,107с). Прекрасно понятно, что в большинстве случаев оно будет практически бесполезно: если необходимо сократить время создания страниц на порядок, то нужны более кардинальные методы. В качестве одного из кэширующих решений может использоваться и Web Optimizer: встроенное кэширование HTML-документов позволяет отдавать их сразу в том виде, в котором они получаются системой после всех запросов к базе. При этом, естественно, практически все эти запросы не осуществляются. Данное кэширование («монолитное») подойдет только в тех случаях, когда внешние страницы у Joomla! меняются относительно редко. Если просто включить в процесс создания страниц, то время обработки документа возрастет незначительно (после создания всех кэширующих файлов на 0,006с или 3% на тестовом сервере). Дополнительно включив HTML-кэширование в Web Optimizer, можно сократить время отдачи документа до 0,08с (почти в 4 раза по сравнению с исходным временем создания страницы). Сразу хочу отметить, что установка вроде аналогичного по функциональности дополнения визуально на производительности никак не отразилась. Очевидно, что более грамотным будет кэшировать отдельные модули на странице, оставляя нужные места (или как их любят называть в шаблонных движках — заглушки) динамическими. Однако данное решение требует существенного вмешательства в алгоритм работы самой CMS. Вполне возможно, что работает именно по такому принципу (пока протестировать его на производительность не удается: дополнение платное и купить его из России несколько проблематично в связи с оплатой только через PayPal или MoneyBookers). Кэширование запросов к базе данныхК серверному кэшированию можно подойти и с другой стороны: ограничить число запросов к базе данных, обычно именно эта часть вызывает наиболее серьезную «утечку» производительности. Для Joomla! существует расширение, позволяющее закэшировать все (или почти все) запросы к базе. Тут стоит понимать, что база данных сама по себе может работать достаточно быстро, и данное решение будет эффективно только в том случае, если восстановление закэшированного значения выборки на порядок (или хотя бы в разы) быстрее, чем осуществление самой выборки (например, 1 мс против 10 мс). В противном случае прироста производительности не появится. Дополнение позволяет использовать как файловую систему, так и популярные кэширующие подсистемы (APC, Memcache и др.) для сохранения выполненных запросов. Однако в случае только файловой системы «завести» кэш не удалось. Клиентская частьДля оценки эффективности решений для клиентской оптимизации будем использовать зарекомендовавший (и относительно беспристрастный :) . «Чистая» система«Чистая» установка Joomla! 1.5 набрала 65 баллов из 100. Вполне приемлемо. Стоит понимать, что если на систему просто «навернуть» десяток модулей и компонентов, то оценка резко ухудшится до 30-40. Следующий этап: архивированиеВ Joomla! есть встроенный CssJsCompress, позволяющее объединять CSS- и JS-файлы. Однако, не добавляет к ним всех кэширующих заголовков и сжатия, что и отразилось на результате: всего 72 балла по YSlow. В самой Joomla! Smart OptimizerДалее был протестирован (как отдельное PHP-приложение) — по характеру работы полностью аналогичный известному (дополнение «завести» не удалось). Установка у него достаточно сложная для непрофессионала, к тому же приходится править шаблоны вручную, нет возможности объединять файлы из разных директорий. Однако все остальное на высоте: оценка поднялась до 85. В самой Joomla! Web Optimizer(как отдельное PHP-приложение), естественно, устанавливается в «два клика» и обладает более мощным клиентским арсеналом: при отключенном сжатии в самой Joomla! оценка поднялась до 93 (с 65 изначально). Думаю, тут уже дополнительных комментариев не нужно. ЗаключениеНа данный момент для Joomla! 1.5 не удалось найти более мощного бесплатного решения для оптимизации производительности, чем . доступен пока только для Joomla! 1.0, а Joomla Performance Booster является платным (если удастся оформить перевод денег, то скоро будет выложен и его обзор). В зависимости от конкретных задач и серверного окружения скорость работы практически произвольного сайта на Joomla! может быть ускорена на порядок (имеется в виду серверное + клиентское ускорение). Возможно, в части производительности Joomla! и уступает , однако при правильном использовании существующих инструментов разрыв этот можно сократить до минимума.
|
Комментарии
Вот тоже юзаю WO, но при включенном серверном кэшировании и включенной опции "не проверять время создания кэша" тестирую время ожидания ответа сервера на webo.in - и оно такое же, как и при выключенных этих опциях! Смотрю в папку кэш - дата создания не меняется, вывод - файлы на отправку каждый раз WO не генерит. В чем дело может быть?
P.S. при включенном нативном кэше жумлы время ожидания ответа сервера при повторных запросах = ~80 мс. Цитировать
P.S. Программист 12 лет стажа. Цитировать
Ну кагбэ если у вас сайт с 10 запросами к серверу БД и сервак сильный, свой или VDS - то, по большому счету, больше париться, чем выигрывать. Но а если сайт на бесплатной joomla! с посещением более 1к уников в день на виртуальном хостинге? Попробуете войти в книгу рекордов? =) Вот, почитайте книгу, станет сразу все понятно:
http://speedupyourwebsite.ru/books/speed-up-your-website/online/ Цитировать
На глаз.. раза в 2-3 время загрузки страницы было уменьшено. Если в дальнейшем глюков не будет - это действительно стоящая весчь!
Пока не разобрался - чем бесплатный отличается от платного… Цитировать
Если что-нибудь еще посоветуете, будет круто. Вашу статью почитал, но так как я не шарю во всех этих штуках, то мне лучше по совету что-нито взять, установить и нигде не копаться.
Спасибо Цитировать
Вот поэтому нужно тестировать на локальной машине или делать резервное копирование. Цитировать