


Серверная часть. Разгоняем Joomla! 1.5. Практическое приложение. Оптимизация структуры веб-страниц
Клиентская часть
Заключение
Для начала посмотрим, что можно сделать с серверной производительностью. Для исследования использовалась стандартная сборка Joomla!, но даже в такой комплектации на отдельном сервере время создания страницы занимало 0,312с (замер времени ответа производился с помощью curl, интерфейс к которому выложен на webo.in, http://webo.in/my/action/timings/). Это не очень много, но в условиях виртуального хостинга может возрасти многократно, даже на изначально хорошо оптимизированных окружениях.
Встроенное кэширование в Joomla! 1.5 работает достаточно хорошо и позволяет сэкономить существенное время при создании страницы. Однако нужно понимать, что оно может быть применимо далеко не для всякой системы. В случае статичных новостных сайтов и небольших интернет-магазинов кэширование может помочь, но для социальных сетей с активным добавлением новых материалов и их комментированием оно точно не подойдет.
Кэширование на стороне сервера
Включение встроенного кэширования в Joomla! 1.5 сократило время ответа тестируемого сервера примерно на 30% (на 0,107с). Прекрасно понятно, что в большинстве случаев оно будет практически бесполезно: если необходимо сократить время создания страниц на порядок, то нужны более кардинальные методы.В качестве одного из кэширующих решений может использоваться и Web Optimizer: встроенное кэширование HTML-документов позволяет отдавать их сразу в том виде, в котором они получаются системой после всех запросов к базе. При этом, естественно,
практически все эти запросы не осуществляются. Данное кэширование («монолитное») подойдет только в тех случаях, когда внешние страницы у Joomla! меняются относительно редко.
Если просто включить Web Optimizer (http://code.google.com/p/web-optimizator/) в процесс создания страниц, то время обработки документа возрастет незначительно (после создания всех кэширующих файлов на 0,006с или 3% на тестовом сервере). Дополнительно включив HTML-кэширование в Web Optimizer, можно сократить время отдачи документа до 0,08с (почти в 4 раза по сравнению с исходным временем создания страницы). Сразу стоит отметить, что установка вроде аналогичного по функциональности дополнения Content Static (http://extensions.joomla.org/extensions/site-management/cache/5104/details) визуально на производительности никак не отразилась.
Очевидно, что более грамотным будет кэшировать отдельные модули на странице, оставляя нужные места (или как их любят называть в шаблонных движках — заглушки) динамическими. Однако данное решение требует существенного вмешательства в алгоритм работы самой CMS. Дополнение System-Cache (включено в сборку по умолчанию) работает именно по такому принципу и на данный момент обеспечивает практически наилучшую производительность (при большой стабильности алгоритма).
Заканчивая речь про кэширование создаваемых страниц на стороне сервера, стоит упомянуть, что дополнение Joomla Performance Booster (http://www.joomlatwork.com/products/components/joomla-performance.html) в ходе тестирования показало результаты примерно на 50% (пятикратный прирост производительности по сравнению с «обычной» версией) лучше, чем System-Cache, однако может работать не настолько стабильно.
Кэширование запросов к базе данных
К серверному кэшированию можно подойти и с другой стороны: ограничить число запросов к базе данных, обычно именно эта часть вызывает наиболее серьезную «утечку» производительности. Для Joomla! существует расширение, позволяющее закэшировать все (или почти все) запросы к базе. Тут стоит понимать, что база данных сама по себе может работать достаточно быстро, и данное решение будет эффективно только в том случае, если восстановление закэшированного значения выборки на порядок (или хотя бы в разы) быстрее, чем осуществление самой выборки (например, 1 мс против 10 мс). В противном случае прироста производительности не появится.Дополнение Query Cache (http://extensions.joomla.org/extensions/site-management/cache/3180/details) позволяет использовать как файловую систему, так и популярные кэширующие подсистемы (APC, Memcache и др.) для сохранения выполненных запросов.