Это будет полезно тем у кого обычный хостинг ,
при этом динамичный сайт с выводом модулей на страницах.
Есть возможность снизить нагрузку на БД , убрав немного запросов для
незарегистрированных пользователей (которых наверное у всех большинство))
Как мы знаем , у всех модулей есть возможность кеширования на определенный срок.
Это очень существенно может снизить нагрузку на БД и ускорить процесс генерации странички .
Я настроил у себя кеширование примерно от 3 до 30 минут на разные модули ,
попутно отслеживая ко-л во запросов и время генерации.
На главной удалось снизить запросы с ~100 до ~55.
Сейчас кеш для гостей работает так же как и для зарегистрированных пользователей.
Т.е. БД дергается постоянно на проверку жизни кеша и если , что - обновляет.
Это и понятно , сайт должен оставаться динамичным ..
Но можно немного и схитрить )
Можно сделать так , что бы незарегистрированный пользователь никогда не дергал базу запросами
о жизни кеша, тем самым ускорить генерацию и еще снизить запросы в базу.
Логика хака такова :
Для Незарегистрированного пользователя не будет запросов в базу о жизни кеша.
Соответственно и модули не будут лишний раз дергать базу ..
Кеш в обычном режиме будет обновляться только при посещении сайта зарегистрированным пользователем.
И соответственно это обновление увидят и гости на сайте, т.е. сайт по прежнему остается динамичным !
Это ,например мне, позволило дополнительно снизить запросы на главной с 55 до 36 для гостей..
т.е. на каждую сотню гостей , только на на главной страничке, убрано более 1900 запросов к БД !)
Время жизни кеша на это никак не влияет , можно хоть 1 минуту ставить ..
Делается все в файле core/classes/page.class.php
Нужно найти функцию : public function printModules($position)
и в ней вот эти строки :
Код PHP:
и заменить на :if( $mod['is_external'] ){ if (file_exists($modulefile)){ require_once $modulefile; if ($mod['cache'] && $inCore->isCached('module', $mod['mid'], $mod['cachetime'], $mod['cacheint'])){ $modulebody = $inCore->getCache('module', $mod['mid']); $callback = true; } else { $config = $inCore->yamlToArray($mod['config']); $inCore->cacheModuleConfig($mod['module_id'], $config); ob_start(); $callback = $mod['content']($mod['module_id']); $modulebody = ob_get_clean(); if($mod['cache']) { $inCore->saveCache('module', $mod['mid'], $modulebody); } } } }
Код PHP:
if($mod['is_external']){ if (file_exists($modulefile)){ require_once $modulefile; if (!$inUser->id){ if ($mod['cache']){$modulebody = $inCore->getCache('module', $mod['mid']);$callback = true;} else {$config = $inCore->yamlToArray($mod['config']);$inCore->cacheModuleConfig($mod['module_id'], $config); ob_start();$callback = $mod['content']($mod['module_id']);$modulebody = ob_get_clean();}} else { if ($mod['cache'] && $inCore->isCached('module', $mod['mid'], $mod['cachetime'], $mod['cacheint'])){$modulebody = $inCore->getCache('module', $mod['mid']); $callback = true;} else {$config = $inCore->yamlToArray($mod['config']);$inCore->cacheModuleConfig($mod['module_id'], $config); ob_start();$callback = $mod['content']($mod['module_id']);$modulebody = ob_get_clean(); if($mod['cache']) {$inCore->saveCache('module', $mod['mid'], $modulebody); }}}}}
Ну и как обычно ... Не забудьте сделать резервную копию и тд и тп ..
