MV framework logo
  • Архитектура
  • Философия
  • Админ панель
  • Поддержка
  • Обратная связь
Документация
Скачать .zip версия 3.2.0 от 25.12.2024
  • Архитектура
  • Философия
  • Админ панель
  • Поддержка
  • Обратная связь
Начало работы
  • Установка и запуск
  • Структура папок
  • Запуск простого сайта
  • Предустановленные модели
  • SQLite начало работы
  • Системные настройки
  • Миграции
  • Отладка
Модели
  • Общие принципы моделей
  • Типы данных
  • Настройка модели
  • Простые модели
  • Внешние ключи
  • Деревья
  • Многие ко многим
  • Группа
  • Управление записями
  • Управление простыми моделями
  • Дополнительные возможности
Шаблоны и маршрутизация
  • Общие принципы шаблонов
  • Объект класса Router
  • Объект MV
  • Создание нового шаблона
  • Вывод данных в шаблоне
  • Объект класса Record
  • Файлы и изображения
  • Дата и время
  • Редиректы и Http
  • Отправка email
  • Специальные методы
Формы
  • Создание форм
  • Настройка полей формы
  • Валидация полей формы
  • Безопасность форм
  • Работа с данными формы
  • Использование данных из моделей
  • Методы форм
SQL запросы
  • Конструктор запросов
  • Прямые запросы
  • Постраничная разбивка
  • Сортировка
  • Фильтрация
Дополнительно
  • AJAX
  • Плагины
  • Кэширование
  • Безопасность
  • Дополнения к административной панели
Документация
Начало работы
  • Установка и запуск
  • Структура папок
  • Запуск простого сайта
  • Предустановленные модели
  • SQLite начало работы
  • Системные настройки
  • Миграции
  • Отладка
Модели
  • Общие принципы моделей
  • Типы данных
  • Настройка модели
  • Простые модели
  • Внешние ключи
  • Деревья
  • Многие ко многим
  • Группа
  • Управление записями
  • Управление простыми моделями
  • Дополнительные возможности
Шаблоны и маршрутизация
  • Общие принципы шаблонов
  • Объект класса Router
  • Объект MV
  • Создание нового шаблона
  • Вывод данных в шаблоне
  • Объект класса Record
  • Файлы и изображения
  • Дата и время
  • Редиректы и Http
  • Отправка email
  • Специальные методы
Формы
  • Создание форм
  • Настройка полей формы
  • Валидация полей формы
  • Безопасность форм
  • Работа с данными формы
  • Использование данных из моделей
  • Методы форм
SQL запросы
  • Конструктор запросов
  • Прямые запросы
  • Постраничная разбивка
  • Сортировка
  • Фильтрация
Дополнительно
  • AJAX
  • Плагины
  • Кэширование
  • Безопасность
  • Дополнения к административной панели
MV tracker

Кэширование

MV позволяет кэшировать данные для быстрого извлечения. Обычно кэшируются фрагменты кода, полученные в результате большого количества SQL запросов и затрат на обработку данных. Например, можно кэшировать вложенные меню, либо списки элементов, в которых выстроены сложные связи между несколькими таблицами.

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

Для включения возможности кэширования необходимо поставить опцию 'EnableCache' в значение true в файле config/setup.php.

Кэширование на время

//Сохранить строку с ключом 'greeting' на 100 секунд
$mv -> cache -> save('greeting', 'Hello world!', 100);

//Проверить кэш по ключу
if(null !== $value = $mv -> cache -> find('greeting'))
{
    ...
}

Сброс кэша происходит при каждой операции с любой из записей модели, привязанной к ключу кэша.

Кэширование c привязкой к админке

Сброс кэша можно привязать к операциям в админке. Когда происходит CRUD операция в одной или нескольких моделях кэш будет сброшен.

//Сохранить строку с ключом 'hello' и очищать его при любом действии с моделями
$mv -> cache -> save('hello', 'Hello world!', '*');

//Очищать кэш при любом действии с моделью Pages
$mv -> cache -> save('hello', 'Hello world!', ['Pages']);

//Очищать кэш при любом действии с несколькими моделями
$mv -> cache -> save('hello', 'Hello world!', ['Pages', 'News', 'GiftsPromo']);

Кэширование результата метода

Предположим в модели Catalogs имеется метод displayLeftCatalogMenu(), который отображает дерево категорий и использует на это много SQL запросов. Необходимо закэшировать результат метода в шаблоне для ускорения генерации страницы. Очищать кэш нужно только при изменениях в модели Catalogs. Модифицируем код в шаблоне, отвечающий за отображение каталога. 

//Файл шаблона в папке views/...

//До кэширования
echo $mv -> catalogs -> displayLeftCatalogMenu();

//После применения кэширования
if(!$mv -> cache -> findAndDisplay('catalog-menu'))
    echo $mv -> cache -> save('catalog-menu', 
                              $mv -> catalogs -> displayLeftCatalogMenu(),
                              ['Catalogs']);

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

//Привязка очистки кэша к действиям в админке в нескольких моделях
if(!$mv -> cache -> findAndDisplay('something'))
    echo $mv -> cache -> save('something', 
                              $mv -> pages -> displaySomething(),
                              ['Pages', 'Catalogs', 'News']);

Кэширование media файлов

MV может сжимать большое количество CSS и JS файлов в один, значительно уменьшая при этом количество запросов к серверу со стороны браузера.

//Файл views/main-header.php до кэширования

<link rel="stylesheet" type="text/css" href="<? echo $mv -> media_path; ?>css/style.css" />
<link rel="stylesheet" type="text/css" href="<? echo $mv -> media_path; ?>css/catalog.css" />

<script type="text/javascript" src="<? echo $mv -> media_path; ?>js/jquery.js"></script>
<script type="text/javascript" src="<? echo $mv -> media_path; ?>js/utils.js"></script>

//После кэширования
<?
    CacheMedia::instance();
    CacheMedia::addCssFile(['style.css', 'сatalog.css']);
    CacheMedia::addJavaScriptFile(['jquery.js', 'utils.js']);

    if(...)
        CacheMedia::addCssFile('style-special.css');

    //Это условие не обязательно
    if(Http::isLocalHost())
        echo CacheMedia::getInitialFiles();
    else
        echo CacheMedia::getAllCache();
?>

Если в каком-либо шаблоне идет дополнительное включение файлов в media кэш, то их необходимо добавлять до включения файла main-header.php.

CacheMedia :: addJavaScriptFile([
    'request.js',
    'media/jquery-ui/jquery-ui.min.js'
]);

CacheMedia :: addCssFile([
    'media/jquery-ui/jquery-ui.min.css',
    'media/jquery-ui/jquery-ui.structure.min.css',
    'media/jquery-ui/jquery-ui.theme.min.css'
]);

include $mv -> views_path.'main-header.php';
При заливке на рабочий сервер обязательно увеличивайте на единицу настройку Build в файле config/setup.php. Это приведет к обновлению media кэша. Также для сброса кэша можно очистить папку userfiles/cache/.

Примечания

  • Оценить эффективность кэширования можно по количеству SQL запросов и времени генерации страницы. Для этого используется отладочная панель. Для ее отображения нужно поставить настройку ‘DebugPanel’ равной true в файле config/setup.php. Панель появляется внизу страницы.
  • Данные кэширования хранятся в базе данных в таблицах cache и cache_clean, которые могут быть очищены в любой момент без ущерба для работы проекта. Также кэш можно сбросить статическим методом Cache::cleanAll().
  • В объекте $mv -> cache есть методы cleanByKey($key) и cleanByModel($model) для очистки кэша по ключу или названию модели, за которой он закреплен.
  • Значение опции 'EnableCache', выставленное в false полностью останавливает сохранение и отдачу данных из кэша.

Предыдущий раздел

Плагины

Следующий раздел

Безопасность
MV workshop banner
MV tracker

© 2014-2025, MV framework team

English MV tracker project Github

Поделиться