Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#1 2008-10-31 23:10:23

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

FYI: Использование механизма кеширования

(FYI) А знаете ли вы, что:
Многие новые плагины поддерживают кеширования своего вывода.
Данный механизм позволяет значительно уменьшить нагрузку на сервер БД (в некоторых случаях кол-во SQL запросов может быть уменьшено вдвое).


Как это работает:
1. Плагин проверяет наличие в кеше данных, которые лежат в кеше не более периода обновления кеша (конфигурационный параметр). Если данные найдены - плагин выводит данные из кеша и завершает свою работу.
2. Плагин выполняет SQL запрос, формирует ответный текст, выводит данные и помещает их в кеш.


Как это настроить:
Все настройки производятся в разделе Настройки кеширования плагина.
1. Настроить период обновления кеша - для сайтов, обновляемых нечасто (менее 100 статей в сутки) достаточно выставить следующие параметры:
archive/calendar - 10 минут ( 600 секунд )
popular - 5 минут ( 300 секунд)
при таких настройках пользователи вообще не заметят что используется кеширование

2. Включить кеширование выставив значение Да в параметре использовать кеширование данных

Не в сети

#2 2009-04-28 20:27:36

torg
Участник
Откуда Россия
Зарегистрирован: 2009-04-23
Сообщений: 130
Сайт

Re: FYI: Использование механизма кеширования

То есть сам движок ngcms работает через mysql постоянно, а плугины позволяют часто не обращаться к базе за счёт кэша. По сути нагрузка будет на сервер с плагинами, как, если бы ngcms работал без плугинов, ведь отдаётся статика, а не динамика. Значит есть запас, чтобы наворотить много плугинов без сильного ущерба скорости. Значит нужно следить за плугинами и тестировать чётко, чтобы не получилось как напишу ниже.

Читал, как плугины некоторые у dle создавали большую нагрузку на сервер. Но не понятно, как тогда так было, если у них был кэш, видно плугины были плохо тестированы. У ngcms и 2z из-за плохо тестированых плугинов стала бы создаваться большая нагрузка. Остаётся только надеяться на хорошую систему кэширования в плугинах.

Не в сети

#3 2009-04-28 22:03:09

infinity237
Модератор
Откуда Russia, Moscow
Зарегистрирован: 2008-11-09
Сообщений: 2,674
Рейтинг :   176 
Сайт

Re: FYI: Использование механизма кеширования

У ngcms и 2z из-за плохо тестированых плугинов стала бы создаваться большая нагрузка.

o_O

Не в сети

#4 2009-04-28 22:51:23

torg
Участник
Откуда Россия
Зарегистрирован: 2009-04-23
Сообщений: 130
Сайт

Re: FYI: Использование механизма кеширования

Это к любым cms относится smile поэтому надеюсь что кэш будет всегда в плугинах протестирован. Просто удивился когда читал что какой-то плугин тормозит dle сильно.

Не в сети

#5 2009-04-28 22:54:30

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: FYI: Использование механизма кеширования

А ты удивишься если узнаешль что у ngcms при включенном кешировании не тормозит систему...

Не в сети

#6 2009-04-28 22:55:01

infinity237
Модератор
Откуда Russia, Moscow
Зарегистрирован: 2008-11-09
Сообщений: 2,674
Рейтинг :   176 
Сайт

Re: FYI: Использование механизма кеширования

Просто я удивился, что кеш может как-то неправильно работать...
Кеш это видь что:
1. Ставиться время, например 60 секунд.
2. С интервалом 60 секунд делается запрос к БД, и кеш обновляется.
3. Итог: получаем 1 запрос за 60 сек, вместо 60 запросов за 60 секунд.

Не в сети

#7 2009-04-28 22:55:15

torg
Участник
Откуда Россия
Зарегистрирован: 2009-04-23
Сообщений: 130
Сайт

Re: FYI: Использование механизма кеширования

Ну так я примерно и написал в первом сообщении что думаю smile надеюсь. Я бывает ставлю кэш на 600 секунд.

Изменено torg (2009-04-28 22:55:45)

Не в сети

#8 2009-04-29 20:57:33

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: FYI: Использование механизма кеширования

torg,... читал,... много думал,... ничего не понял.
Что именно ты хотел сказать?

Что двиг сам по себе не использует кеш?
Да, так и есть. То, что использует сам двиг - не очень-то поддаётся кешированию, хотя есть ещё фронт работ.

То, что надо тестировать плагины?
Ну так этим занимаются их авторы и пользователи.

То, что бывают плагины, создающие значительную нагрузку?
И тут нет ничего странного - если плагин должен сделать что-то сложное и перелопатить уйму данных, то иногда без высокой нагрузки не обойтись. А уж администратор сайта сам для себя решит нужен ли ему такой плагин или нет.

Не в сети

#9 2010-11-24 10:30:59

Necronominicon
Участник
Откуда Луганск, Украина
Зарегистрирован: 2010-10-31
Сообщений: 102
Рейтинг :   
Сайт

Re: FYI: Использование механизма кеширования

Может туплю после бессонной ночи, но из фака ни черта не понял. Может кто-нибудь расскажет популярно как добавить кеширование? Какой код нужно добавить в плагин? Или где почитать об этом хотя бы?


Бог умер © Ницше
Ницше умер © Бог

Не в сети

#10 2010-11-24 11:54:57

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: FYI: Использование механизма кеширования

Necronominicon пишет:

Может туплю после бессонной ночи, но из фака ни черта не понял. Может кто-нибудь расскажет популярно как добавить кеширование?

Зайти в плагин и включить)))

Necronominicon пишет:

Какой код нужно добавить в плагин? Или где почитать об этом хотя бы?

http://wiki.ngcms.ru/index.php/Базовые_ … и_плагинов "Использование кеширования в плагине" tongue

Не в сети

#11 2010-11-24 18:35:39

Necronominicon
Участник
Откуда Луганск, Украина
Зарегистрирован: 2010-10-31
Сообщений: 102
Рейтинг :   
Сайт

Re: FYI: Использование механизма кеширования

ROZARD, спасибо smile
Кеширование в плагине состоит из двух частей: - Одна из которых заносит из переменной данные которые нужно скешировать:

if (extra_get_param('test','cache')) {
	// Запись
	cacheStoreFile($cacheFileName, $output, 'test');
}
//Кодирум в md5
$cacheFileName = md5('test'.$config['theme'].$config['default_lang'].$year.$month).'.txt';

- Другая вынемает берет из кеша закешированные данные:

// Чтение (в параметрах плагин хранит: cache - флаг сообщающий надо ли использовать кеш, cacheExpire - время жизни кеша в секундах
 	if (extra_get_param('test','cache'))	{
		$cacheData = cacheRetrieveFile($cacheFileName, extra_get_param('test','cacheExpire'), 'test');
		if ($cacheData != false){
			// We got data from cache. Return it and stop
			$template['vars']['test'] = $cacheData;
			return;
		}
	}

Сохранить данные в файл-кеш: $fname - имя файла
$data - содержание
$plugin - ID плагина
function cacheStoreFile($fname, $data, $plugin = ) Возвращает: true - при успехе
false - при неуспехе Получить данные из кеш-файла с учётом времени жизни: $fname - имя файла
$expire - время жизни данных в секундах
$plugin - ID плагина
function cacheRetrieveFile($fname, $expire, $plugin = ) Возвращает: false - если данных нет или устарели данные если они есть и не устарели


Бог умер © Ницше
Ницше умер © Бог

Не в сети

#12 2010-11-24 18:56:31

vitaliy1978
Участник
Зарегистрирован: 2010-05-11
Сообщений: 45
Рейтинг :   
Сайт

Re: FYI: Использование механизма кеширования

Насколько я понимаю: extra_get_param скоро будет depricated. Вроде как лучше использовать pluginGetVariable. Это по тексту топиков.

То что касается кеша. Вещь обалденная. Снижает довольно хорошо нагрузку, но есть несколько вопросов/предложений к разработчику.

1). Предлагаю изменить пути хранения кеша, вместо /engine/cache/{plugin_name}, предлагаю хранить в /engine/cache/{template_name}/{lang}/{plugin_name}. Согласитесь, довольно логично, и будет неплохо для будующей расширяемости, учитывая уже заложенные в систему возможности многоязычности и многошаблонности.
2). Тот механизм что есть, устраивает на все 100%. Однако, не исключено, что в кеше будут храниться данные, которые неиспользуются очень давно. Значит надо как-то его чистить. Либо скриптами, тем кто на VPS либо для крона что-то написать, тем кто на вирт. хостинге.

Во всем остальном, кеш это весчь. Причем очень шустрая на NG.

Изменено vitaliy1978 (2010-11-24 18:57:27)

Не в сети

#13 2010-11-25 09:15:29

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: FYI: Использование механизма кеширования

1. Не согласен.
Плагин сам решает что кешировать, далеко не обязательно, что закешированные данные как-то зависят от шаблона или языка пользователя (можно кешировать сырые данные, а потом на лету собирать шаблон). Кроме того, закешированные данные могут зависить от массы других критериев (к примеру, от статуса пользователя - залогинен или нет).

2. Да, есть такое дело. Очистка кеша пока не предусмотрена, но скоро будет.

Не в сети

#14 2010-11-25 10:44:56

vitaliy1978
Участник
Зарегистрирован: 2010-05-11
Сообщений: 45
Рейтинг :   
Сайт

Re: FYI: Использование механизма кеширования

vitaly пишет:

1. Не согласен.
Плагин сам решает что кешировать, далеко не обязательно, что закешированные данные как-то зависят от шаблона или языка пользователя (можно кешировать сырые данные, а потом на лету собирать шаблон). Кроме того, закешированные данные могут зависить от массы других критериев (к примеру, от статуса пользователя - залогинен или нет).

В принципе наверное правы. Согласен.

Не в сети

Подвал раздела

Работает на FluxBB