Производительность и кэширование⚓︎
Одна из основных характеристик, которые делают Grav настолько привлекательным — это её скорость. Это всегда было ключевым моментом в конструкции Grav, и в первую очередь это связано с кэшированием, но включает несколько других компонентов.
Производительность⚓︎
- Кэширование PHP имеет решающее значение. Вы должны запустить PHP opcache и usercache, чтобы получить максимальную производительность от Grav. В PHP 5.5 и 5.6 Zend opcache с APCu user cache работает немного быстрее.
- SSD-накопители могут иметь большое значение. Большинство вещей можно кэшировать в пользовательском кэше PHP, но некоторые хранятся в виде файлов, поэтому SSD-диски могут сильно повлиять на производительность.
- Собственный хостинг всегда будет быстрее, чем виртуальная машина. Виртуальные машины — отличный способ, с помощью которого хостинг-провайдеры могут предложить гибкие среды «облачного» типа. Они добавляют уровень обработки, который всегда влияет на производительность. Grav всё ещё может быть быстрым на виртуальной машине (намного быстрее, чем Wordpress, Joomla и т. д.), Но всё же для оптимальной производительности вы не можете превзойти вариант нативного хостинга.
- Чем быстрее память, тем лучше. Поскольку Grav работает очень быстро и многие из его решений для кэширования сильно используют память, скорость памяти на вашем сервере может иметь большое влияние на производительность. Grav не использует большие объемы памяти по сравнению с некоторыми платформами, поэтому объем памяти не так важен и не влияет на производительность так сильно, как тип памяти и скорость.
- Общий хостинг дешев и доступен, но совместное использование ресурсов всегда немного замедляет работу. Опять же, Grav может очень хорошо работать на общем сервере (лучше, чем другие CMS), но для максимальной скорости лучше всего использовать выделенный сервер.
- Многоядерные процессоры лучше. Всегда помогут более быстрые и продвинутые процессоры, но не так сильно, как другие моменты.
- Парсер PECL Yaml. Установка собственного PHP-парсера PECL Yaml может увеличить анализ YAML на целых 400%! На это стоит обратить внимание, если вы ищете дополнительную скорость.
Getgrav.org работает на одном выделенном сервере с четырехъядерными процессорами, 16 ГБ памяти и твердотельными накопителями объёмом 6 ГБ. Мы также запускаем PHP 7.4 с Zend opcache и пользовательским кэшем APCu. На веб-серверах работает несколько других веб-сайтов, но не так много, как в среде общего хостинга.
Параметры кэширования⚓︎
Кэширование - это неотъемлемая функция Grav, которая заложена с самого начала. Механизм кэширования, который использует Grav, является основной причиной того, что Grav работает так быстро. Тем не менее, необходимо учитывать некоторые факторы.
Grav использует хорошо зарекомендовавшую себя библиотеку Doctrine Cache. Это означает, что Grav поддерживает любой механизм кэширования, поддерживаемый Doctrine Cache:
- Auto (по умолчанию) - Находит лучший вариант автоматически
- File - Хранит файлы кэша в папке
cache/
- APC - https://php.net/manual/ru/book.apc.php
- Memcache - https://php.net/manual/ru/book.memcache.php
- Redis - https://redis.io
- WinCache - https://www.iis.net/downloads/microsoft/wincache-extension
По умолчанию Grav предварительно настроен на использование параметра «auto». Сначала идет попытка обнаружения APC, затем WinCache, затем XCache и, наконец, File. Вы, конечно, можете явно настроить кэш в вашем файле user/config/system.yaml
, что может немного ускорить работу.
Типы кэширования⚓︎
На самом деле в Grav существует 5 типов кэширования:
- Кэширование конфигурации YAML в PHP.
- Кэширование Core Grav для объектов страницы.
- Кэширование файлов шаблонов в Twig в виде классов PHP.
- Кэширование изображений для медиаресурсов.
- Кэширование ресурсов CSS и JQuery с конвейерной обработкой.
Кэширование конфигурации YAML не настраивается и всегда будет компилировать и кэшировать конфигурацию в папку /cache
. Кэширование изображений также всегда включено и сохраняет обработанные изображения в папке /images
.
Кэширование ядра Grav⚓︎
Кэширование ядра Grav имеет следующие параметры конфигурации, настроенные в вашем файле user/config/system.yaml
:
cache:
enabled: true # Установите значение `true`, чтобы включить кэширование
check:
method: file # Метод проверки обновлений на страницах: file|folder|hash|none
driver: auto # Один из: auto|file|apc|xcache|memcache|wincache|redis
prefix: 'g' # Строка префикса кэша (предотвращает конфликты)
Как видите, параметры задокументированы в самом файле конфигурации. Во время разработки иногда бывает полезно отключить кэширование, чтобы всегда иметь последние правки страниц.
По умолчанию Grav использует метод проверки файлов для кэширования. Это означает, что каждый раз, когда вы запрашиваете URL Grav, Grav использует оптимизированную маршрутизацию для прохождения всех файлов в папке user/pages
, чтобы определить, изменилось ли что-нибудь.
Проверка кэша папок будет немного быстрее, чем проверка файлов, но не будет работать надежно во всех средах. Вам нужно будет проверить, улавливает ли Grav изменения страниц на вашем сервере при использовании опции folder
.
Проверка хеширования (hash
) использует алгоритм быстрого хеширования для всех файлов в каждой папке страницы. В некоторых ситуациях это может быть быстрее, чем проверка файлов, и в нем учитываются все файлы в папке.
Если автоматическое повторное кэширование измененных страниц не критично для вас (или если ваш сайт довольно большой), то установка этого значения на none
ещё больше ускорит производственную среду. Вам просто нужно будет вручную очистить кэш после внесения изменений. Это предназначено для параметра Production-only.
Удаление страницы не очищает кэш, так как очистка кэша основана на метках времени изменения папок.
Вы можете легко принудительно очистить кэш, просто сохранив файл конфигурации.
Специальные параметры Memcache⚓︎
Есть некоторые дополнительные параметры конфигурации, которые требуются, если вы подключаетесь к серверу memcache через параметр драйвера memcache. Эти параметры должны находиться в группе cache:
в вашем user/config/system.yaml
:
Специальные параметры Memcached⚓︎
Подобно memcache, memcached имеет некоторые дополнительные параметры конфигурации, которые требуются, если вы подключаетесь к серверу memcached через параметр драйвера memcached. Эти параметры должны находиться в группе cache:
в вашем user/config/system.yaml
:
Специальные параметры Redis⚓︎
Есть некоторые дополнительные параметры конфигурации, которые необходимы, если вы подключаетесь к серверу redis через параметр драйвера redis
. Эти параметры должны находиться в группе cache:
в вашем user/config/system.yaml
:
В качестве альтернативы вы можете использовать соединение через сокет:
Если ваш сервер Redis имеет пароль или секретный ключ, вы также можете установить его в этой конфигурации:
Вам также понадобится php-redis, установленный в вашей системе.
Специальные параметры Twig⚓︎
Механизм создания шаблонов Twig использует свою собственную файловую систему кэширования, и с ней связано несколько параметров.
twig:
cache: false # Установите значение `true`, чтобы включить кэширование Twig
debug: true # Включить отладку Twig
auto_reload: true # Обновлять кэш при изменениях
autoescape: false # Экранирование переменных Twig
Для небольшого увеличения производительности вы можете отключить расширение debug
, а также отключить auto_reload
, которое выполняет функцию, аналогичную cache: check: method: none
, так как оно не будет искать изменения в файлах .html.twig
для запуска обновления кэш.
Кэширование и события⚓︎
По большей части, события всё ещё запускаются даже при включенном кэшировании. Это справедливо для всех событий, за исключением onPageContentRaw
, onPageProcessed
, onPageContentProcessed
, onTwigPageVariables
и onFolderProcessed
. Эти события запускаются при рекурсии всех страниц и папок и запускаются на каждой найденной странице или папке. Как следует из их названия, они запускаются только во время обработки, а не после кэширования страницы.