Главная  /  Правка версии 1  /  Правка версии 2  /   /  Область пользователей

Отличия "Основы кэширования" вер. 1 сравн. вер. 2

Содержимое:

<!--toc-->
## Введение
Невозможно создать высокопроизводительный фреймворк без надлежащего кэширования. CppCMS предоставляет комплексное API кэширования, позволяющее сохранять кэш согласованным и обновленным.
В этом уроке демонстрируется первый и простой уровень в кэшировании --- кэширование, основанное на тайм-ауте.
В этом уроке мы вычислим факториал и сохраним полученные значения в кэше
Для примера, мы вычислим факториал и сохраним полученные значения в кэше.
## Данные
Наша форма ввода будет содержать только два поля: `arg` и `submit`.
struct input_form : public cppcms::form {
cppcms::widgets::numeric<int> arg;
cppcms::widgets::submit submit;
...
Наше представление (view) будет использовать эту простую форму:
struct message : public cppcms::base_content {
long long int fact;
int arg;
input_form info;
};
И наш темплейт будет очень простым:
<h1>Factorial Calculator</h1>
<h2><%= arg %>! = <%= fact %></h2>
<form method="post" action="" >
<% form as_p info %>
</form>
## Код
Код будет состоять из двух частей:
- Получение новых данных
- Обработка закэшированных данных
Для начала проинициализируем `content`:
content::message c;
c.arg=0;
c.fact=1;
Затем загрузим форму:
if(request().request_method()=="POST") {
c.info.load(context());
if(c.info.validate()) {
c.arg=c.info.arg.value();
c.info.clear();
}
Мы загружаем от пользователя значение `arg`, чтобы знать, что расчитывать.
Мы загружаем от пользователя значение `arg`, чтобы знать, что вычислять.
Теперь, если проверка не пройдена, нам ни к чему больше использовать закэшированные данные, мы рендерим вывод и заканчиваем:
else { // Кэш не должен использоваться
render("message",c);
return;
}
}
Теперь, получив значение, мы должны вычислить факториал
для тестирования, если мы уже делали это и он в кэше:
std::ostringstream key;
key << "factorial_" << c.arg;
if(cache().fetch_page(key.str()))
return;
Если он к кэше, `fetch_page` вернет true и изменит вывод на подготовленную страницу.
_Замечание: _ Вы должны обратить внимание, то когда страница извлекается из кэша, она представлена в сжатом или несжатом формате, согласно запросу пользователя. Таким образом, в действительности, вы не только сохраните все операции, необходимые для создания страницы, но также сэкономите на времени сжатия, что может быть существенным для больших страниц.
_Замечание: _ Вы должны обратить внимание, что когда страница извлекается из кэша, она представлена в сжатом или несжатом формате, согласно запросу пользователя. Таким образом, в действительности, вы не только сохраните все операции, необходимые для создания страницы, но также сэкономите на времени сжатия, что может быть существенным для больших страниц.
Теперь, если такого ключа не существует, вычисляем факториал и рендерим вывод:
long long int f=1;
for(int i=1;i<=c.arg;i++) {
f*=i;
}
c.fact=f;
render("message",c);
Теперь, когда вывод готов, мы можем хранить его в кэше для последующего использования с тайм-аутом 1 час:
cache().store_page(key.str(),3600);
_Замечание: _ В данном конкретном случае, мы не должны устанавливать тайм-аут, а можем использовать бесконечное значение тайм-аута по-умолчанию и вызвать:
_Замечание: _ В данном конкретном случае мы не обязаны устанавливать тайм-аут, а можем использовать бесконечное значение тайм-аута по-умолчанию и вызвать:
cache().store_page(key.str());
Но в основном динамические страницы устаревают, поэтому мы должны определить тайм-аут или использовать триггеры (триггеры не рассматриваются в данном руководстве).
## Очистка кэша
Вы можете удалить записи кэша "воскрешением" их ключей, например:
cache().rise("factorial_10");
Удалит запись с ключом `factorial_10` из памяти, однако этого не требуется в случае нашей простой программы.
удалит запись с ключом `factorial_10` из памяти. Но этого не требуется в случае нашей простой программы.
## Конфигурация
Для использования кэша, мы должны определить backend кэширования, поэтому добавим в `config.js` следующие строки:
"cache" : {
"backend" : "thread_shared",
"limit" : 100,
}
Тип нашего backend'а: `thread_shared`. Мы также должны определить его размер, как число записей, например 100. См. [Configuration::Cache](/wikipp/en/page/cppcms_1x_config#cache) для корректной настройки вашего backend'а кэширования.
Тип нашего backend'а: `thread_shared`. Мы также должны определить его размер как число записей, например 100. См. [Configuration::Cache](/wikipp/en/page/cppcms_1x_config#cache) для корректной настройки вашего backend'а кэширования.
## Дополнительные материалы
Это основы использования кэша. Вообще система кэширования CppCMS предоставляет гораздо больше:
- Удаление набора ключей с помощью обычных триггеров,
- Автоматическое отслеживание зависимостей различных ключей,
- Сохранение (сериализация) в кэше различных объектов C++,
- Сохранение простых "текстовых фреймов" в кэше для более быстрого рендеринга элементов, типа: sidebar'ы, header'ы, footer'ы, сигнатуры и прочее.
- Сохранение простых "текстовых фреймов" в кэше для более быстрого рендеринга элементов, типа: sidebar'ов, header'ов, footer'ов, сигнатур и прочего.
См. [cppcms::cache\_interface](/cppcms_ref_v0_99/classcppcms_1_1cacheinterface.html) и [cppcms::triggers\_recorder](/cppcms_ref_v0_99/classcppcms_1_1triggersrecorder.html) для подробного описания и примеров.

Проект

CppCMS является основой веб-разработки для выполнения ресурсоемких приложений.

Размещение

SourceForge.net Logo

Поддержать проект

CppCMS needs You


Навигация

Главная страница


Валидация CSS | Валидация XHTML 1.0