Один из вещи которые должны быть для оптимизации производительности приложения Zend Framework 2 используется кэширование конфигураций. Идея состоит в том, чтобы объединить их в один большой файл конфигурации (или фактически два файла, например, module-classmap-cache.php
а также module-config-cache.php
), так что файлы конфигурации не нужно открывать и объединять при каждом запросе. (См. Информацию в официальная документация и с практическими рекомендациями в статье Роба Аллена «Кэширование вашей объединенной конфигурации ZF2«):
application.config.php
return [
'modules' => [
...
],
'module_listener_options' => [
...
'config_cache_enabled' => true,
'config_cache_key' => 'app_config',
'module_map_cache_enabled' => true,
'module_map_cache_key' => 'module_map',
'cache_dir' => './data/cache',
],
];
Я хотел бы оптимизировать его немного больше и загрузить конфиги из кеша в памяти (например, APCu). Это предусмотрено рамками? Или я должен написать эту функцию сам?
Механизм кеширования реализован в ConfigListener
класс ModuleManager
(источник написать конфиг & читать конфигурацию).
Как вы можете видеть, единственный поддерживаемый метод кэширования — это запись конфигурации в файл.
Он создается по умолчанию в DefaultListenerAggregate
(источник), что опять-таки жестко закодировано в ModuleManagerFactory
модуля MVC (источник).
Чтобы заменить это своей собственной логикой, вам необходимо:
ConfigListener
с вашим собственным (или, по крайней мере, расширить соответствующие части) ModuleManagerFactory
явно установить свой собственный ConfigListener
на DefaultListenerAggregate
прежде чем это станет ленивым.Хотя это осуществимо, не стоит думать, что оно того стоит. Поскольку объединенный файл конфигурации является файлом php, он все равно должен кэшироваться OpCache. И в конечном итоге OpCache — это php-оптимизированный кэш в памяти. Так что я ожидаю, что это будет даже быстрее, чем в любом универсальном хранилище в памяти.
Других решений пока нет …