Превращаем сайт на Joomla в статический

Недавно один из моих сайтов на CMS Joomla переехал на довольно медленный хостинг на котором почти сразу же начались проблемы с нагрузкой. Сайт довольно большой (несколько тысяч страниц в индексе Яндекса), ну и сама CMS Joomla1.5 тоже не из легких и мне потребовалось срочно найти решение, которое бы позволило снизить нагрузку на сервер не внося никаких радикальных изменений в сам сайт. Решение, которое я применил, получилось из разряда “быстро, дешево и сердито”, но полностью решило поставленную задачу – сайт превратился в статический :) Как это было сделано – читайте дальше…

Задача была разбита на две основные части:

  1. Движок Джумлы должен был, как обычно, отправлять запросы к бд, парсить шаблоны и компоновать готовую страничку для того, чтобы отдать её в браузер пользователю. Но, кроме того, эта страничка должна быть сохранена в специальном кеше для того, чтобы при повторном обращении к странице, вся эта работа уже не повторялась заново.
  2. Для тех страниц, копия которых уже есть в кеше, сделано перенаправление на уровне .htaccess. Таким образом, веб-сервер отдает обычный статический файл из кеша, причем код тяжелой Джумлы в этом случае не выполняется вообще.

Итак, всё что мне потребовалось сделать… Для пункта первого: была создана директория /static/ для хранения кеша и в файл index.php корневой папки Джумлы, в самый конец, после строк:

// trigger the onAfterRender events
JDEBUG ? $_PROFILER->mark('afterRender') : null;
$mainframe->triggerEvent('onAfterRender');

добавились такие строки:

$page = JResponse::toString($mainframe->getCfg('gzip'));
 
$DOCUMENT_ROOT = 'полный/путь/к/корневой/папке';
 
$filecache = $DOCUMENT_ROOT . 'static' . $_ENV['REQUEST_URI'];
 
$cache = fopen($filecache, 'w');
fwrite($cache, $page);
fclose($cache);
 
echo $page;

Если всё сделано правильно, то после этого шага копии открытых страниц уже сохраняются в директории /static/. Осталось только сделать чтобы веб-сервер отдавал сохраненную копию страницы вместо выполнения кода Джумлы. Это было сделано при помощи таких нескольких строк:

RewriteCond %{REQUEST_METHOD} GET
RewriteCond /полный/путь/к/корневой/директории/static/%{REQUEST_URI} -f
RewriteRule .* /static/%{REQUEST_URI} [L]

Всё, несколько минут и по мере того, как страницы сайта посещают посетители и поисковые боты, генерируются новые страницы, сохраняются в кеше и сайт плавно превращается в статический, причем сохраняются все преимущества CMS Joomla по удобству редактирования и управления контентом.

Если вам понравился этот сайт, вы можете подписаться на rss

Отзывы: Комментариев нет

Ваш отзыв

Имя (*)

E-mail (*)

Сайт

Сообщение