Бортовой журнал Ктулху

Оптимизация производительности Joomla 2.5

Несколько способов ускорить работу сайта на Joomla.

Отключить mootools на публичной части

Экономия ~300 kb траффика.

http://www.inmotionhosting.com/support/edu/joomla-25/302-disable-mootools-in-joomla-25

libraries/joomla/document/html/renderer/head.php

Находим такой кусок кода:

// Generate script file links
 foreach ($document->_scripts as $strSrc => $strAttr)
 {
$buffer .= $tab . '<script src="' . $strSrc . '"';
if (!is_null($strAttr['mime']))
 {
 $buffer .= ' type="' . $strAttr['mime'] . '"';
 }
 if ($strAttr['defer'])
 {
 $buffer .= ' defer="defer"';
 }
 if ($strAttr['async'])
 {
 $buffer .= ' async="async"';
 }
 $buffer .= '></script>' . $lnEnd;
 }

и вставляем в начале цикла


// Written by Brad Markle w/ InMotionHosting.com
 $ex_src = explode("/",$strSrc);
 $js_file_name = $ex_src[count($ex_src)-1];
 $js_to_ignore = array("mootools-core.js","mootools-more.js");
 if( in_array($js_file_name,$js_to_ignore) AND substr_count($document->baseurl,"/administrator") < 1 AND $_GET['view'] != 'form')
 continue;

Получилось так:


// Generate script file links
 foreach ($document->_scripts as $strSrc => $strAttr)
 {
 
 // Code to disable mootools for your site (still loads it for your admin)
 // Written by Brad Markle w/ InMotionHosting.com
 $ex_src = explode("/",$strSrc);
 $js_file_name = $ex_src[count($ex_src)-1];
 $js_to_ignore = array("mootools-core.js","mootools-more.js");
 if( in_array($js_file_name,$js_to_ignore) AND substr_count($document->baseurl,"/administrator") < 1 AND $_GET['view'] != 'form')
 continue;

$buffer .= $tab . '<script src="' . $strSrc . '"';
 if (!is_null($strAttr['mime']))
 {
 $buffer .= ' type="' . $strAttr['mime'] . '"';
 }
 if ($strAttr['defer'])
 {
 $buffer .= ' defer="defer"';
 }
 if ($strAttr['async'])
 {
 $buffer .= ' async="async"';
 }
 $buffer .= '></script>' . $lnEnd;
 }

Из очевидных недостатков этой оптимизации - не работают модули, использующие mootools.

Оптимизировать код страницы

Сжать и объединить CSS, JS, очистить HTML от пробелов и переносов строк.

Я протестировал два плагина для этих целей: jfinalizer и RokBooster, оба позволяют делать различную оптимизацию в зависимости от настроек, например сжатие и объединение, кеширование js и css.

После применения этих плагинов код становится примерно таким.

e0956e8c92

 

Использование CDN

Да-да, для Joomla даже такое придумали.

 1. CDN для Joomla – NoNumber

Это одно с главных расширений для Joomla, которое было разработано NoNumber. Оно гарантирует легкую стыковку с рядом CDN провайдеров, в том числе Amazon CloudFront, CloudCache, CDNetworks, CacheFly и др. Вы сможете выбрать профессиональную или бесплатную версию с одинаково качественным клиентским обслуживанием.

Создание сайта на Joomla

2. jomCDN – corePHP

Этот платное расширение компилирует ресурсы автоматически и потом синхронизирует их с серверами Amazon. Оптимизация изображений является автоматической. Изображения оптимизируются к меньшему размеру без существенного понижения в качестве. Функция кэширования в браузере означает, что Ваши ресурсы будут помещены в кэш сразу же при просмотре сайта. С этого следует, что в следующий раз страница будет загружаться моментально.

CDN Joomla

3. JA Amazon S3 компонент - JoomlArt

Используя это расширение, Вы можете выгружать свою папку в Amazon S3 (Amazon Simple Storage Service). Как только Вы выгрузили свою папку, адрес к файлам обновляется расширением. Amazon S3 тогда посылает запрос файлам, а не папкам. В результате время загрузки для посетителей, как и нагрузка на сервер – снижается.

Оптимизация .htaccess

ETag - указывает браузеру использовать изображения из локального кэша браузера, вместо сервера.
Expires Headers - позволяет устанавливать различные сроки кеширования для различных типов файлов
AddOutputFilterByType DEFLATE - Минимизировать исходный код ваших составленных HTML файлов, удаление пробелов.

########## Begin - ETag Optimization
## This rule will create an ETag for files based only on the modification
## timestamp and their size.
## Note: It may cause problems on your server and you may need to remove it
FileETag MTime Size
# AddOutputFilterByType is now deprecated by Apache. Use mod_filter in the future.
AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript
# Enable expiration control
ExpiresActive On
# Default expiration: 1 hour after request
ExpiresDefault "now plus 1 hour"
# CSS and JS expiration: 1 week after request
ExpiresByType text/css "now plus 1 week"
ExpiresByType application/javascript "now plus 1 week"
ExpiresByType application/x-javascript "now plus 1 week"

# Image files expiration: 1 month after request
ExpiresByType image/bmp "now plus 1 month"
ExpiresByType image/gif "now plus 1 month"
ExpiresByType image/jpeg "now plus 1 month"
ExpiresByType image/jp2 "now plus 1 month"
ExpiresByType image/pipeg "now plus 1 month"
ExpiresByType image/png "now plus 1 month"
ExpiresByType image/svg+xml "now plus 1 month"
ExpiresByType image/tiff "now plus 1 month"
ExpiresByType image/vnd.microsoft.icon "now plus 1 month"
ExpiresByType image/x-icon "now plus 1 month"
ExpiresByType image/ico "now plus 1 month"
ExpiresByType image/icon "now plus 1 month"
ExpiresByType text/ico "now plus 1 month"
ExpiresByType application/ico "now plus 1 month"
ExpiresByType image/vnd.wap.wbmp "now plus 1 month"
ExpiresByType application/vnd.wap.wbxml "now plus 1 month"

ExpiresByType application/smil "now plus 1 month"
# Audio files expiration: 1 month after request
ExpiresByType audio/basic "now plus 1 month"
ExpiresByType audio/mid "now plus 1 month"
ExpiresByType audio/midi "now plus 1 month"
ExpiresByType audio/mpeg "now plus 1 month"
ExpiresByType audio/x-aiff "now plus 1 month"
ExpiresByType audio/x-mpegurl "now plus 1 month"
ExpiresByType audio/x-pn-realaudio "now plus 1 month"
ExpiresByType audio/x-wav "now plus 1 month"

# Movie files expiration: 1 month after request
ExpiresByType application/x-shockwave-flash "now plus 1 month"
ExpiresByType x-world/x-vrml "now plus 1 month"
ExpiresByType video/x-msvideo "now plus 1 month"
ExpiresByType video/mpeg "now plus 1 month"
ExpiresByType video/mp4 "now plus 1 month"
ExpiresByType video/quicktime "now plus 1 month"
ExpiresByType video/x-la-asf "now plus 1 month"
ExpiresByType video/x-ms-asf "now plus 1 month"

 

Включить кеширование Joomla

75a6bfbe6a

 

75a0e22b94

 

Статья для размышления

http://www.joomlart.com/tutorials/joomla-tutorials/10-tips-to-improve-joomla-site-performance