Как кешировать конфиги приложения в памяти в Zend Framework 2?

Один из вещи которые должны быть для оптимизации производительности приложения 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). Это предусмотрено рамками? Или я должен написать эту функцию сам?

3

Решение

Механизм кеширования реализован в ConfigListener класс ModuleManager (источник написать конфиг & читать конфигурацию).
Как вы можете видеть, единственный поддерживаемый метод кэширования — это запись конфигурации в файл.

Он создается по умолчанию в DefaultListenerAggregate (источник), что опять-таки жестко закодировано в ModuleManagerFactory модуля MVC (источник).

Чтобы заменить это своей собственной логикой, вам необходимо:

  • Заменить ConfigListener с вашим собственным (или, по крайней мере, расширить соответствующие части)
  • Изменить ModuleManagerFactory явно установить свой собственный ConfigListener на DefaultListenerAggregate прежде чем это станет ленивым.

Хотя это осуществимо, не стоит думать, что оно того стоит. Поскольку объединенный файл конфигурации является файлом php, он все равно должен кэшироваться OpCache. И в конечном итоге OpCache — это php-оптимизированный кэш в памяти. Так что я ожидаю, что это будет даже быстрее, чем в любом универсальном хранилище в памяти.

2

Другие решения

Других решений пока нет …