Производительность и кэширование¶
Одна из ключевых особенностей, которая делает Grav таким привлекательным, — это его скорость. Это всегда было важным соображением в самом устройстве Grav и в первую очередь обеспечивается кэшированием, но включает и несколько других компонентов.
Производительность¶
-
Кэширование PHP критически важно. Чтобы получить максимальную производительность от Grav, следует использовать opcache и пользовательский кэш PHP (например, APCu).
-
SSD-диски могут дать большую разницу. Большинство вещей может кэшироваться в пользовательском кэше PHP, но некоторые хранятся в виде файлов, поэтому SSD-диски могут заметно повлиять на производительность. Избегайте использования сетевых файловых систем вроде NFS с Grav.
-
Нативный хостинг всегда будет быстрее виртуальной машины. Виртуальные машины — отличный способ, которым хостинг-провайдеры предлагают гибкие «облачные» окружения. Они добавляют слой обработки, который всегда влияет на производительность. Grav всё равно может быть быстрым на виртуальной машине (гораздо быстрее wordpress, joomla и т. п.), но для оптимальной производительности нативный хостинг не превзойти.
-
Более быстрая память лучше. Поскольку Grav очень быстрый и многие его решения для кэширования активно используют память, скорость памяти на вашем сервере может сильно влиять на производительность. По сравнению с некоторыми платформами Grav не использует большие объёмы памяти, поэтому её количество не так важно и не влияет на производительность так сильно, как тип и скорость памяти.
-
Быстрые многоядерные процессоры лучше. Более быстрые и современные процессоры всегда помогают, но не так сильно, как остальные пункты.
-
Общий хостинг дёшев и общедоступен, но совместное использование ресурсов всегда немного замедляет работу. Опять же, Grav может очень хорошо работать на общем сервере (лучше, чем другие CMS), но для максимальной скорости нужен выделенный сервер.
-
Парсер YAML PECL. Установка нативного парсера YAML PECL для PHP может увеличить скорость разбора YAML вплоть до 400%! На это стоит обратить внимание, если вам нужна дополнительная скорость.
Внимание
getgrav.org работает на одном выделенном сервере с четырёхъядерными процессорами, 16 ГБ памяти и SSD-дисками на 6 ГБ. Мы также используем PHP 7.4 с Zend opcache и пользовательским кэшем APCu. На веб-серверах работает ещё несколько сайтов, но не так много, как в окружении общего хостинга.
Параметры кэширования¶
Кэширование — неотъемлемая фича Grav, заложенная с самого начала. Механизм кэширования, который использует Grav, — основная причина его скорости. При этом есть несколько факторов, которые стоит учитывать.
Grav использует устоявшуюся и уважаемую библиотеку Doctrine Cache. Это значит, что Grav поддерживает любой механизм кэширования, который поддерживает Doctrine Cache. То есть Grav поддерживает:
- Auto (по умолчанию) — автоматически находит лучший вариант
- File — хранит кэш в файлах в папке
cache/ - APCu — https://php.net/manual/en/book.apcu.php
- Memcache — https://php.net/manual/en/book.memcache.php
- Redis — https://redis.io
- WinCache — https://www.iis.net/downloads/microsoft/wincache-extension
По умолчанию Grav настроен на использование параметра auto. Он попробует APC, затем WinCache и, наконец, File. Разумеется, вы можете явно настроить кэш в файле user/config/system.yaml, что может сделать работу чуть быстрее.
Типы кэширования¶
На самом деле в Grav происходит 5 типов кэширования:
- Кэширование конфигурации YAML в PHP.
- Основное кэширование Grav для объектов страниц.
- Кэширование Twig — шаблонные файлы компилируются в PHP-классы.
- Кэширование изображений для медиаресурсов.
- Кэширование ресурсов CSS и JQuery с объединением (pipelining).
Кэширование конфигурации YAML не настраивается и всегда компилирует и кэширует конфигурацию в папке /cache. Кэширование изображений также всегда включено и хранит обработанные изображения в папке /images.
Основное кэширование Grav¶
Основное кэширование Grav имеет следующие параметры конфигурации, задаваемые в файле user/config/system.yaml:
Как видите, параметры документированы в самом файле конфигурации. Во время разработки иногда полезно отключить кэширование, чтобы всегда видеть последние правки страниц.
По умолчанию Grav использует для кэширования метод проверки file. Это значит, что при каждом запросе URL Grav с помощью высокооптимизированной маршрутизации проходит по всем файлам в папке user/pages, чтобы определить, изменилось ли что-нибудь.
Проверка кэша folder немного быстрее, чем file, но работает надёжно не во всех окружениях. При использовании параметра folder вам нужно проверить, подхватывает ли Grav изменения страниц на вашем сервере.
Проверка hash использует быстрый хеш-алгоритм для всех файлов в каждой папке страницы. В некоторых ситуациях это может быть быстрее проверки файлов и при этом учитывает каждый файл в папке.
Если автоматическое перекэширование изменённых страниц для вас не критично (или ваш сайт довольно большой), установка значения none ещё больше ускорит продакшен-окружение. Только после изменений нужно будет вручную очищать кэш. Это настройка, предназначенная только для продакшена.
Совет
Удаление страницы не очищает кэш, так как очистка кэша основана на временных метках изменения папок.
Примечание
Кэш легко принудительно очистить, просто коснувшись или сохранив файл конфигурации.
Параметры 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 использует собственную файловую систему кэширования, и с ней связаны несколько параметров.
Для небольшого выигрыша в производительности можно отключить расширение debug, а также отключить auto_reload, который выполняет функцию, похожую на cache: check: method: none, поскольку не ищет изменения в файлах .html.twig для запуска обновления кэша.
Кэширование и события¶
По большей части события всё равно вызываются, даже когда кэширование включено. Это верно для всех событий, кроме onPageContentRaw, onPageProcessed, onPageContentProcessed, onTwigPageVariables и onFolderProcessed. Эти события выполняются при рекурсивном обходе всех страниц и папок и срабатывают для каждой найденной страницы или папки. Как следует из их названий, они выполняются только во время обработки, а не после того, как страница закэширована.