Файловое кеширование DLE [снижаем нагрузку на MySQL]
Нашел на нуледе очень интересную инструкцию, решил перекинуть сюда, авось пригодится. Автор инструкции: kodges
Инструкция по установке:
1. Создаем папку /engine/cache/all и ставим на нее права на запись (chmod 777 или 775 в зависимости от хостера).
2. Открываем index.php и редактируем:
Находим:
PHP код:
@session_start ();
PHP код:
///////////////Файловое кэширование//////////////
if($_SESSION['dle_user_id'] == 0 && $_SERVER['REQUEST_METHOD'] == "GET")
{
$cache_time = 21600; //Время жизни кеша в секундах
$FCache = $_SERVER['DOCUMENT_ROOT'].'/engine/cache/all/'.md5($_SERVER['REQUEST_URI']).'.html';
if (file_exists($FCache) && filemtime($FCache)>time()-$cache_time)
{
echo join('',file($FCache))."<!-- use cache -->";
exit;
}
}
/////////////////////////////////////////////////
Находим:
PHP код:
$tpl->compile ( 'main' );
Вставляем перед:
Находим:
Вставляем после:
PHP код:
//////////Файловое кэширование//////////
if($_SESSION['dle_user_id'] == 0 && $_SERVER['REQUEST_METHOD'] == "GET")
{
$pageBuf = ob_get_contents();
$fp = fopen($FCache, "w");
fputs($fp, $pageBuf);
fclose($fp);
}
////////////////////////////////////////
После этих манипуляций в папке /engine/cache/all будут накапливаться кешированные страницы сайта.
Для того чтобы устаревший кеш редкооткрываемых страниц не копился и не забивал вам винчестер, добавляем по крону выполнение следующего скрипта каждые 10 минут например.
PHP код:
<?
$cache_time = 21600+10; //Время жизни кеша в секундах + 10 секунд
$url = "/home/admin/domains/site.ru/public_html/engine/cache/all/"; // полный путь к папке с кешем от корня сервера.
$dir = opendir($url);
while(($file = readdir($dir)) !== false)
{
$ras = pathinfo($file);
if($ras[extension] == 'html')
{
$FCache = $url.$file;
if (file_exists($FCache) && filemtime($FCache) < time()-$cache_time)
{
unlink($FCache);
}
}
}
closedir($dir);
?>
Данный метод кеширования существенно снижает нагрузку на базу данных. К примеру у автора инструкции есть сайт на DLE с посещаемостью 70к+ в сутки, а благодаря файловому кешированию нагрузка на базу данных не превышает 70%. Без данного кеширования, при такой посещаемости, DLE просто ложил базу данных MySQL на выделенном сервере!
В данном примере время жизни кеша 6 часов, оптимально для сайтов с посещаемостью более 50к. При этом кеш занимает на диске 2-3 гигабайта. Для сайтов с меньшей посещаемостью можно уменьшить время жизни кеша и соответственно уменьшится его размер на винчестере.
Есть еще вариант очистки кэша, чтобы кеш можно было чистить вместе с остальным кешем нажатием кнопки в админке .
Для этого нужно
открыть ./engine/inc/
main.php
найти там:
PHP код:
clear_cache();
}
и перед этим добавить:
PHP код:
///// ЧИСТИМ ФАЙЛОВЫЙ КЭШ /////
$fcachedirname = ENGINE_DIR.'/cache/all';
if ($objs = glob($fcachedirname."/*")) {
foreach($objs as $obj) {
is_dir($obj) ? removeDirRec($obj) : unlink($obj);
}
}
rmdir($fcachedirname);
@mkdir (ENGINE_DIR.'/cache/all', 0777);
@chmod (ENGINE_DIR.'/cache/all/', 0777);
////////////////
И в конце чтоб Вы поняли весь смысл сделанного, и почему я с такой радостью делюсь с Вами этим способом, немного простых цифр.
1.В тот же день посещаемость пробила 45к уников – новый рекорд этого сайта.
2.Одновременное пребывание пользователей на сайте зафиксировано 700, до этого был максимум 400.
Если у Вас есть сайт на DLE с посещаемостью более 30к – очень рекомендую этот метод. На версии 8.5 отлично все работает, другие версии не проверял, по идее будет работать на всех, но лучше обновиться до 8.5 и поставить хак:).
Насколько метод простой, настолько же он и эффективен.
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 30 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
|