Редактор темы

Дополнительный кэш для dle

MegaMonstr

Команда форума
VIP Кинотрафик v2
Регистрация
27 Сен 2015
Сообщения
1.085
Рейтинг реакций
246
Баллы
83
1/3
Автор темы
Нашел на просторах интернета вот такой хак, дополнительное кэширование - файловое и через мэмкэш, со слов автора, очень сильно ускоряет работу сайта, себе установил, но есть одна проблемка, кэш работает только для не авторизированных пользователей, сайт начинает реально работать на много быстрее.

Файловое кэширование:

В папке /engine/cache/ создаем папку fcache и ставим на нее права 777

Код:
Найти в index.php

define ( 'DATALIFEENGINE', true );

Выше добавить

////////////////////////////////////Файловое кэширование/////////////////////////////////////
if( $_SESSION['dle_user_id'] == false && $_SERVER['REQUEST_METHOD'] == "GET" )
{
    $fcache = $_SERVER['DOCUMENT_ROOT'] . '/engine/cache/fcache/' . md5( $_SERVER['REQUEST_URI'] ) . '.html';
    if ( file_exists( $fcache ) && filemtime( $fcache ) > time() - 3600*3 ) exit( file_get_contents( $fcache ) );
}
/////////////////////////////////////////////////////////////////////////////////////////////

Находим в файле /engine/modules/main.php - в самом низу

GzipOut();

Вставляем выше:

///////////////////////////////Файловое кэширование//////////////////////////////
if( $_SESSION['dle_user_id'] == false && $_SERVER['REQUEST_METHOD'] == "GET" )
file_put_contents( $fcache, ob_get_contents() );
/////////////////////////////////////////////////////////////////////////////////

Все. Теперь у вас в папке /engine/cache/fcache/ будет накапливаться кэш при каждом посещении сайта не зарегистрированным юзером, (гостем).
3600*3 — означает что время жизни кэша 3 часа. По истечении которого кэш будет перезаписан.
Но, для того чтобы кэш редко открываемых страниц не копился и не забивал вам диск, создаем следующий скрипт в корне сайта и ставим в кроне на выполнение его каждые 15 минут например.
Например файл clear.php

Код:
<?php
$cache_time = 3600*3+60; // время жизни кэша + 60 секунд.
$dir = "/var/www/username/data/www/site.ru/engine/cache/fcache/"; // абсолютный путь до папки с кэшем
echo "site.ru: "; // домен вашего сайта
//==========================Очистка устаревшего файлового кэша============//
$del = 0;
$fdir = opendir( $dir );
while( ( $file = readdir( $fdir ) ) !== false )
{
    $filetype = explode( '.', $file );
    $type = array_pop( $filetype );
    $fcache = $dir . $file;
    if ( $type == 'html' AND file_exists( $fcache ) AND filemtime( $fcache ) < time() - $cache_time )
    {
        $del++;
        unlink( $fcache );
    }
}
closedir( $fdir );
echo $del . " files deleted \n\r";
//========================================================================//
?>



А теперь товарищи самое интересное и вкусное )))

Вариант кэширования с использованием memcached.

Открываем index.php, находим:
Код:
define ( 'DATALIFEENGINE', true );

Вставляем выше:

////////////////////////////////Кеширование в Memcached ///////////////////////////////////////////
if( $_SESSION['dle_user_id'] == false && $_SERVER['REQUEST_METHOD'] == "GET" )
{
    $memcache = memcache_connect( 'localhost', 11211 );
    $memkey = md5( $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] );
    $mempage = memcache_get( $memcache, $memkey );
    if( $mempage ) exit( $mempage );
}
///////////////////////////////////////////////////////////////////////////////////////////////////


Находим:

GzipOut ();

Вставляем выше:

////////////////////////////////Кеширование в Memcached ///////////////////////////////////////////
if( $_SESSION['dle_user_id'] == false && $_SERVER['REQUEST_METHOD'] == "GET" )
{
    memcache_set( $memcache, $memkey, ob_get_contents(), MEMCACHE_COMPRESSED, 3600*2 );
    memcache_close( $memcache );
}
///////////////////////////////////////////////////////////////////////////////////////////////////

3600*2 это время жизни кэша, 3600 секунды это 1 час, умножаем 3600 на 2 получается время жизни 2 часа.

Всё! Наслаждаемся процессом

А теперь вопрос к знатокам, данный кэш работает отлично, все нравиться, но единственный минус, когда ты авторизованный переходишь на страницу которая уже в кэше, то приходиться еще раз авторизоваться, и так постоянно. Может можно что то придумать?
 
Плохо, в том что вся страница идет в кэш для пользователя.
 
Автор темы
суть этого метода
Я имел ввиду вот это:
А теперь вопрос к знатокам, данный кэш работает отлично, все нравиться, но единственный минус, когда ты авторизованный переходишь на страницу которая уже в кэше, то приходиться еще раз авторизоваться, и так постоянно. Может можно что то придумать?
 
Автор темы
Мне допустим не лень авторизироваться еще раз, но вот как быть с людьми которые к примеру захотят оставить коммент, он к примеру решит авторизироваться, зайдет на страницу, а его опять выкинет.

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

В общем как я понимаю, не чего не придумать?
По идеи нет, но если подумать может что-то и придумать можно
 
3600*3 — означает что время жизни кэша 3 часа. По истечении которого кэш будет перезаписан.
Но, для того чтобы кэш редко открываемых страниц не копился и не забивал вам диск, создаем следующий скрипт в корне сайта и ставим в кроне на выполнение его каждые 15 минут например.
Дичь какая то. Ставить кэш на 3 часа, а удаление кэша каждые 15 минут.

Для удаления редких страниц - ставить раз в день и норм.
 
Хотя глянул скрипт, там проверка времени жизни файла, но все равно дичь запускать каждые 15 минут.
 
Хотя глянул скрипт, там проверка времени жизни файла, но все равно дичь запускать каждые 15 минут.
Нет, это для файлового кэша через 15 минут, а для mamcache через 2 часа, там он автоматически удаляет
 
Так в DLE, вроде, memcache кэширование уже реализовано.
 
стоит у меня такой. все нормально
 
нет. с админ панели не выкидывает. а на сайте не бываю
а как админка и сайт связаны ? думаешь что пишешь то?))) там разные файлы и кэш только для сайта, естественно что с админкой ничего не будет)))00
 
а как админка и сайт связаны ? думаешь что пишешь то?))) там разные файлы и кэш только для сайта, естественно что с админкой ничего не будет)))00
думаю,как есть так и пишу! я откуда знаю разные не разные кеши, был вопрос (Не задраивает авторизироваться постоянно?) я на него как есть так и ответил, а что разные кеш или не разные,вообще не знаю,и похер какой он там
 
Че за проблемас парни?
Почему бы просто не отключить этот чудо кеш для пользователей?
if( $_SESSION['dle_user_id'] == false && $is_logged == 0 && $_SERVER['REQUEST_METHOD'] == "GET" )
 

Похожие темы Последние темы Популярные темы

Назад
Сверху