• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

Хак Файловое кеширование DLE (снижаем нагрузку на БД)

Статус
В этой теме нельзя размещать новые ответы.
Раньше этот вариант кеширования работал. Сейчас перенес проекты на новый сервер, попробовал заново - не работает. Папка all не заполняется.

Могу равзе что предположить, что виной этому является nginx. Это возможно? И как исправить?
 
Эм... А можно не скромный вопрос? MySQL быстрее, нежели файловая система... Накой нужно такое кэширование, которое замедляет работу сайта?
 
Никак мускул не быстрее файлов. При размере базы на дле в полгига - гиг, и суточном траффике хотя бы от 10к, уже неплохо ощутимы аппетиты мускуля. При этом DLE скажем так не самый оптимизированный в плане запросов двиг. Если ничего не отключать, то на страницу до 10 запросов в БД может давать(поправьте если ошибаюсь). Вот и получается что отдать юзеру файл кеш - проще в плане нагрузки, да и скорости.
 
  • Заблокирован
  • #34
Никак мускул не быстрее файлов. При размере базы на дле в полгига - гиг, и суточном траффике хотя бы от 10к, уже неплохо ощутимы аппетиты мускуля. При этом DLE скажем так не самый оптимизированный в плане запросов двиг. Если ничего не отключать, то на страницу до 10 запросов в БД может давать(поправьте если ошибаюсь). Вот и получается что отдать юзеру файл кеш - проще в плане нагрузки, да и скорости.

Да, количество запросов зависит от того сколько модулей наставили, но можно и с 1 -3 модулями положить сервер.

Эм... А можно не скромный вопрос? MySQL быстрее, нежели файловая система... Накой нужно такое кэширование, которое замедляет работу сайта?

дело в том что если у вас нагруженные сайт, то гораздо быстрее и проще отдать уже готовый контент который лежит в файлике, нежели юзать для этого апач мускуль и генерировать его заново, особенно когда 10-20-50 человек одновременно хотят его получить


Раньше этот вариант кеширования работал. Сейчас перенес проекты на новый сервер, попробовал заново - не работает. Папка all не заполняется.

Могу равзе что предположить, что виной этому является nginx. Это возможно? И как исправить?

Вы уверены что пути правильные указали?


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

Так же очень сильную нагрузку дает модуль переходы, отследите медленные запросы в mysql 80% этих запросов это будут запросы от модуля переходы и поиска похожих новостей
 
Потестил вчера кеширование, отлично работает.
Добавлю от себя немного, не совсем хорошо когда в кеш попадает навигация(морда, страницы) поэтому у себя заменил
Код:
if($_SESSION['dle_user_id'] == 0 && $_SERVER['REQUEST_METHOD'] == "GET")
на
Код:
if($_SESSION['dle_user_id'] == 0 && $_SERVER['REQUEST_METHOD'] == "GET" && ($_REQUEST['do'] == 'search' || $_REQUEST['newsid']))
В этом варианте кешируются страницы со статьями и страницы поиска
Код:
if($_SESSION['dle_user_id'] == 0 && $_SERVER['REQUEST_METHOD'] == "GET" && $_REQUEST['newsid'])
Здесь только статьи
 
На Друпале есть модуль с подобным функционалом,
но мне там идея понравилась использования htaccess, в итоге, если html файл полностью готовой странички есть в кэше, то htaccess отдает эту страницу даже не запуская php обработчик.

Может можно было бы и для DLE такое прикрутить.
 
не знаю, надо кому или нет - сделал у себя, чтобы кеш можно было чистить вместе с остальным кешем нажатием кнопки в админке ...
смысл - удаляем при нажатии кнопки папку "all" вместе с внутренностями, а потом вновь ее создаем...
для этого нужно всего-то
открыть ./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);
////////////////
и усё... ну если название папки меняли - то изменить и в коде...
Добавлено через 9 минут
кстати, где-то видел хак "Автоочистка кеша", если совместить его - не надо будет ничего в крон писать - для многих это проблематично. я кстати так и сделал - несколько строчек в index.php и теперь кеш чистится автоматом через установленное время - проверено работатает. ТС - спасибо за модификацию
а в 9.2 нет строчки
как быть?
 
Спасибо за хорошее решение!

Так все-таки, делать кэширование или нет. Для меня этот вопрос открыт остался.

Попробовал код, у меня работает на денвере если убрать

ob_start();

а в .htaccess добавить

php_flag output_buffering On

При этом если из .htaccess исключить эту строку, а оставить ob_start();

не работает! Файлики нулевые получаются.

Может кому пригодиться.
 
Кто возьметсе дописать под dle 9.2 готов предоставить сайт для тестов, возможно за дополнительную плату , Срочно..
 
Господа, извиняйте что редко появляюсь... Дела...
По делу. Вариант из первого поста отлично работает вплоть до последней версии DLE включительно!
У кого не работает (не появляется кеш в папке .../all/) проверьте не включено ли у вас Gzip сжатие в самой админке движка DLE?
Если включено, то код:
PHP:
//////////Файловое кэширование//////////
if($_SESSION['dle_user_id'] == 0 && $_SERVER['REQUEST_METHOD'] == "GET")
{
    $pageBuf = ob_get_contents();
    $fp = fopen($FCache, "w");
    fputs($fp, $pageBuf);
    fclose($fp);
}
////////////////////////////////////////
надо вставлять перед
PHP:
GzipOut ();
И все будет хокейно ))
На серверах с nginx данное кеширование также отлично работает!
И да прибудет с вами сила !!! )))

ЗЫ: посещаловка более 100к в сутки отлично выдерживается на DLE с использованием данного кеширования, на сервере ниже среднего...
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху