Привет всем !
Это будет полезно тем у кого обычный хостинг,
при этом динамичный сайт с выводом модулей на страницах.
Есть возможность снизить нагрузку на БД, убрав немного запросов для
незарегистрированных пользователей (которых наверное у всех большинство))
Как мы знаем, у всех модулей есть возможность кеширования на определенный срок.
Это очень существенно может снизить нагрузку на БД и ускорить процесс генерации странички .
Я настроил у себя кеширование примерно от 3 до 30 минут на разные модули,
попутно отслеживая ко-л во запросов и время генерации.
На главной удалось снизить запросы с ~100 до ~55.
Сейчас кеш для гостей работает так же как и для зарегистрированных пользователей.
Т.е. БД дергается постоянно на проверку жизни кеша и если, что — обновляет.
Это и понятно, сайт должен оставаться динамичным ..
Но можно немного и схитрить )
Можно сделать так, что бы незарегистрированный пользователь никогда не дергал базу запросами
о жизни кеша, тем самым ускорить генерацию и еще снизить запросы в базу.
Логика хака такова :
Для Незарегистрированного пользователя не будет запросов в базу о жизни кеша.
Соответственно и модули не будут лишний раз дергать базу ..
Кеш в обычном режиме будет обновляться только при посещении сайта зарегистрированным пользователем.
И соответственно это обновление увидят и гости на сайте, т.е. сайт по прежнему остается динамичным !
Это, например мне, позволило дополнительно снизить запросы на главной с 55 до 36 для гостей..
т.е. на каждую сотню гостей, только на на главной страничке, убрано более 1900 запросов к БД !)
Время жизни кеша на это никак не влияет, можно хоть 1 минуту ставить ..
Делается все в файле core/classes/page.class.php
Нужно найти функцию: public function printModules($position)
и в ней вот эти строки :
и заменить на :
Ну и как обычно… Не забудьте сделать резервную копию и тд и тп…
Это будет полезно тем у кого обычный хостинг,
при этом динамичный сайт с выводом модулей на страницах.
Есть возможность снизить нагрузку на БД, убрав немного запросов для
незарегистрированных пользователей (которых наверное у всех большинство))
Как мы знаем, у всех модулей есть возможность кеширования на определенный срок.
Это очень существенно может снизить нагрузку на БД и ускорить процесс генерации странички .
Я настроил у себя кеширование примерно от 3 до 30 минут на разные модули,
попутно отслеживая ко-л во запросов и время генерации.
На главной удалось снизить запросы с ~100 до ~55.
Сейчас кеш для гостей работает так же как и для зарегистрированных пользователей.
Т.е. БД дергается постоянно на проверку жизни кеша и если, что — обновляет.
Это и понятно, сайт должен оставаться динамичным ..
Но можно немного и схитрить )
Можно сделать так, что бы незарегистрированный пользователь никогда не дергал базу запросами
о жизни кеша, тем самым ускорить генерацию и еще снизить запросы в базу.
Логика хака такова :
Для Незарегистрированного пользователя не будет запросов в базу о жизни кеша.
Соответственно и модули не будут лишний раз дергать базу ..
Кеш в обычном режиме будет обновляться только при посещении сайта зарегистрированным пользователем.
И соответственно это обновление увидят и гости на сайте, т.е. сайт по прежнему остается динамичным !
Это, например мне, позволило дополнительно снизить запросы на главной с 55 до 36 для гостей..
т.е. на каждую сотню гостей, только на на главной страничке, убрано более 1900 запросов к БД !)
Время жизни кеша на это никак не влияет, можно хоть 1 минуту ставить ..
Делается все в файле core/classes/page.class.php
Нужно найти функцию: public function printModules($position)
и в ней вот эти строки :
if( $mod['is_external'] ){ 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); $callback = $mod['content']($mod['module_id']); if($mod['cache']) { $inCore->saveCache('module', $mod['mid'], $modulebody); } } } }
if($mod['is_external']){ 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); 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); if($mod['cache']) {$inCore->saveCache('module', $mod['mid'], $modulebody); }}}}}
Ну и как обычно… Не забудьте сделать резервную копию и тд и тп…
Реклама #
picaboo 12 лет назад #
кстати у вас на морде <!-- 1.5993(37) -->
а если войти в блоги <!-- 0.0747(63) -->
что-то всеравно тормозит, запросов в два раза меньше, а время генерации в 20 раз больше
KS 12 лет назад #
А их к сожалению кешировать нельзя .. Поэтому и время генерации такое ..
Если их отключить то будет как в блогах .
Но честно говоря 1.5 что то совсем много . У меня больше 0.4 не было на главной ..
Если есть возможность , попробуйте пару раз обновить страничку , посмотрите сколько покажет .
picaboo 12 лет назад #
KS 12 лет назад #
Это как я и думал модули мапса. Больше всего грузит новостной , запрос в нем тяжелый идет на вывод всего. буду его ковырять на днях )
Хотя если в мапсе включить режим одного города, то он летать начинает..
Получается все связано с детектом города и отсевом вывода после этого.
Спасибо Вам и Sjen за бдительность !
Попробовал с отключением всего Мапса , главная стала - <!-- 0.0470(32) -->
letsgo 12 лет назад #
fact 12 лет назад #
KS 12 лет назад #
У меня запросов без кеша около 100 на главной должно бы быть ..
С кешем 55 минимум (пока он живет)
С хаком (вне зависимости жизни кеша) 36-37
universe 12 лет назад #
KS 12 лет назад #
В этом и логика. Контент в основном обновляют зарегистрированные пользователи.
universe 12 лет назад #
KS 12 лет назад #
А если какой либо модуль например парсит инфо, то его можно просто не кешировать и он будет обновлятся и у гостей )
googlebot 12 лет назад #
universe 12 лет назад #
Дмитрий 12 лет назад #
Не работает вот с этим модулем: http://instantcms.ru/blogs/moi-blozhek/modul-socialnye-zakladki.html
Гости не видят иконок социалок, только сам блок.
У зареганных всё хорошо.
Дмитрий 12 лет назад #
ИЕ8 залогиненный юзер тоже не видит эти закладки и лог из браузера:
Сведения об ошибке на веб-странице
Агент пользователя: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.3; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C)
штамп времени: Wed, 9 May 2012 00:32:52 UTC
Сообщение: '0' - есть null или не является объектом
Строка: 18
Символ: 1
Код: 0
URI-код: .../modules/mod_soccontent/bookmarks.js
В строке 18 находится такой код:
btn+='<a href="http://'+services[0]+'" target=_blank><img src="'+dir+services[1]+'" alt="Добавить в '+services[2]+'" title="Добавить в '+services[2]+'" style="border:0;padding:0;margin:0 4px 0 0;"></a>';}
Ох уж этот ИЕ - ВСЕГДА проблемы ))
KS 12 лет назад #
Попробуйте отключить кеширование блока соц закладок.
Заметил такую вещь , что если включать кеш для модулей у которых js прописан прямо внутри кода ,
вылазиют всякие глюки ..
У меня так же с было с модулем вывода новостей на js , решил сунуть код внутрь , а его "понесло"
по экрану )..
SJen 12 лет назад #
в tpl шаблоне через "add_js file"?
Дмитрий 12 лет назад #
http://made-in-handmade.com - вот здесь модуль BOOKMARK
KS 12 лет назад #
Скрипт мизерный , я его легко вставил внутрь и он заработал , но
как то криво .. причем функционал в норме а дизайн перекосило в ИЕ.
Это наверно как в случае с вашим кешированием и ИЕ ,
скорее всего что то похожее ..
Дмитрий 12 лет назад #
s21 12 лет назад #
а где показывается тот результат? тоже хочу проверить свой сайт...
KS 12 лет назад #
Только после тестов отключить не забудьте )
s21 12 лет назад #
Alon 10 лет назад #
KS 10 лет назад #
У меня на 1.10 стоит, полет нормальный
Alon 10 лет назад #
Александр I 10 лет назад #
В файле ../core/classes/page.class.php
В функции public function printModules($position)
найти (стр. 432-456):
Александр 10 лет назад #