Я решил написать статью по оптимизации Joomla для моего блога joomup.com/blog. А пока статья находится в процессе написания, выкладываю на всеобщее обозрение ее «черновик» (даже скорее «краткое содержание первой части»). Любые дополнения и критика приветствуются.
Сегодняшняя статья должна заинтересовать многих, так как она посвящена проблеме оптимизации Joomla, т.е. повышению ее производительности.
Хочу сразу предупредить, что повысить производительность Joomla на несколько порядков только за счет оптимизации вряд ли удастся. Поэтому задумайтесь, может быть имеет смысл сменить хостинг, перейти на виртуальный сервер, на выделенный сервер, проапгрейдить сервер, использовать несколько серверов (тут можно отметить pdf-руководство Joomla Cluster на forum.joomla.org), и т.д.
В этой статье я постараюсь описать только то, что можно сделать, не внося изменений в файлы Joomla (т.е. вы сможете безболезненно делать последующие обновления Joomla), и лишь в конце слегка коснусь того, какие изменения можно сделать в файлах Joomla для ускорения ее работы (эта часть еще не написана). Самые «существенные» советы отмечены знаком «*».
Сначала несколько советов, которые применимы к любой CMS, написанной на PHP:
1*. Используйте обновленное ПО. Например, PHP 5.2 работает почти в 2 раза быстрее, чем PHP 4.4.
2*. Используйте PHP-акселлераторы. Среди самых известных можно выделить Alternative PHP Cache (APC), eAccelerator, XCache, Zend Optimizer. По данным тестов joomla.org, самая быстрая работа Joomla обеспечивается с использованием APC и PHP 5.2.2 (см. выше про производительность PHP).
3.* Оптимизация Apache. Если вы используете сервер Apache, оптимизируйте его под свои нужды (на сайте www.crucialp.com описано, как провести оптимизацию под большой трафик).
4. Не обязательно использовать сервер Apache. Вместо него можно использовать более быстрый Lighttpd. Об использовании Joomla с Lighttpd написано на сайте ircmaxell.com: тут и тут.
5.* Оптимизация MySQL. По-умолчанию MySQL устанавливается с минимальными настройками. Попробуйте изменить эти настройки в соответствии с возможностями вашего сервера (советую прочитать статьи на joomlaperformance.com и profitpapers.com). Хорошим способом ускорить работу MySQL является настройка кэширования запросов. Текущее состояние параметров кэша можно увидеть, выполнив команду «SHOW STATUS LIKE ‘qcache%’;». Параметр query_cache_type должен иметь ненулевое значение, а в параметре query_cache_size должен быть указан размер кэша (именно это значение вам придется подобрать для обеспечения наилучшей производительности). Все эти параметры задаются в вашем файле my.cnf, например:
query_cache_size = 20M
query_cache_limit = 2M
Уделите внимание параметру max_connections. Увеличьте его значение, иначе вас очень быстро настигнет проблема «too many connections».
6. Подумайте о переносе картинок в наполненном графикой популярном посте на отдельный сервер или хостинг. Можно использовать мощности бесплатных сервисов (например flickr) и разместить изображения там. Точно также можно перенести и многие другие файлы.
7. Если вы используете свой сервер также в качестве DNS-сервера, то уменьшить нагрузку на сервер можно, вынеся DNS на отдельный сервер.
8. Не забудьте включить gzip-сжатие, если хотите уменьшить трафик (правда, это слегка увеличит нагрузку на процессор). Кстати, это можно сделать не только для html-страниц, генерируемых Joomla, но и для всех css и js файлов. Если на вашем сервере установлен Apache 2, то просто добавьте следующие директивы в ваш файл .htaccess:
SetOutputFilter DEFLATE
</FilesMatch>
9. Совершенно не к чему каждый раз загружать одни и те же css/js файлы и графику. Как правильно поместить их в кэш браузера, описано на apachedev.ru, а для знающих английский рекомендую статью на askapache.com.
10. Оптимизируйте графику в шаблоне. Некоторые сайты славятся тем, что загружают несколько сотен килобайт картинок. Вообще, проверяйте объем загружаемой информации и время загрузки на сайте https://www.websiteoptimization.com/services/analyze/index.html.
11. Старайтесь уменьшить количество запросов к серверу. Постарайтесь объединить имеющиеся css-файлы в один. То же самое относится и к js-скриптам. Да и сами файлы очистить от лишнего мусора.
12. Для более быстрого отображения страницы в браузере желательно, чтобы на странице не было ошибок. Вы можете проверить свой сайт, например, на validator.w3.org.
13?. Добавьте favicon.ico и favicon.gif в корень сайта, т.к. некоторые браузеры сначала запрашивают их, а не те, которые указаны в коде страницы (их не так много, но в логах сервера эти запросы появляются с завидной регулярностью).
Теперь перейдем к советам, относящимся к собственно Joomla.
14*. Включите кэширование для всех модулей, для которых это возможно. Время жизни кэша определите из условия: сколько времени вы готовы ждать, пока добавленная новость появится в модуле последних новостей? Для одних сайтов это будет 10 минут, для других – час, для третьих – сутки. (Если хотите, вот числа: в «свежеустановленной» Joomla при посещении главной страницы генерируется 36 запросов, а с включенным кэшированием модулей — всего 13 запросов).
15*. Добавьте индексы для таблиц в БД. Тут есть несколько альтернативных предложений по оптимизации: ircmaxell.com и forum.joomla.org (перевод на русский — joomlaportal.ru). Я бы рекомендовал те, что описаны на forum.joomla.org, т.к. на ircmaxell.com уж очень большие индексы создаются.
16*. Не забывайте, что при частом изменении таблиц БД они сильно возрастают в размере, поэтому время поиска по БД тоже возрастает. Поэтому БД нужно регулярно оптимизировать (по сути — сжимать). Установите мамбот OptimizeTables (от smart’а) или выполняйте оптимизацию таблиц вручную (выделите все таблицы через phpMyAdmin, и выполните команды repair и optimize).
17*. Можно сменить тип таблицы jos_session на memory:
(если ваша версия Joomla использует другой префикс таблиц, то не забудьте заменить «jos» на него).
18*. Отключите встроенную статистику. В большинстве случаев статистика, предоставляемая хостер;ом, дает намного больше информации о посетителях. Но можно оставить статистику поисковых запросов.
19. Удалите лишние (неиспользуемые) расширения (компоненты, модули, мамботы).
20. Много запросов образуется при формировании списки новостей в различных модулях (из-за получения Itemid для каждой новости). Это можно ускорить, используя постоянный Itemid, появившийся в 1.0.12.
21. Много запросов зачастую генерируют сторонние SEF-компоненты. При большой нагрузке лучше использовать встроенный SEF, или не использовать SEF вовсе (кстати, встроенный SEF практически не требователен к ресурсам; более того, по данным теста joomla.org Joomla!1.5 с включенным SEF работает быстрее, чем с отключенным).
22. Старайтесь не использовать в настройках пунктов меню «Category Name Linkable» («Названия категорий в виде ссылок»).
23. Для полей id в таблицах БД можно вместо типа int(11) указать smallint unsigned, что приводит к небольшому уменьшению объема памяти, требуемого для хранения БД.
24. Закройте через robots.txt от индексации поисковыми ботами компонент com_search и файл index2.php. Также можно закрыть com_wraper и com_newsfeed (ленты новостей), т.к. поисковики могут посчитать это дублированным контентом. Ниже приведен набор правил для встроенного SEF:
Disallow: /index2.php?
Disallow: /component/option,com_search/
Disallow: /component/option,com_newsfeeds/
Disallow: /component/option,com_wrapper/
Кстати, в robots.txt можно также ограничить (на всякий случай) доступ поисковиков к файлам Joomla:
Disallow: /cache/
Disallow: /components/
Disallow: /editor/
Disallow: /help/
Disallow: /includes/
Disallow: /language/
Disallow: /mambots/
Disallow: /media/
Disallow: /modules/
25. Перед использованием любого расширения никогда не забывайте проверить, нет ли у него более быстрых аналогов.
26. Оптимизируйте используемый шаблон (например, удалите лишние пробелы и переводы строк).
Просмотров: 1157