Фабричные классы против замыканий в Zend Framework 2

Лучше ли использовать фабричные классы или замыкания в Zend Framework 2 и почему?

Я знаю, что замыкания не могут быть сериализованы, но если вы вернете их из Module#getServiceConfig(), это не повлияет на кэширование остальных ваших данных конфигурации, и замыкания будут кэшироваться в вашем кеше кода операции в любом случае.

Чем отличается производительность при создании класса фабрики от выполнения замыкания? Обрабатывает ли PHP и создает экземпляры замыканий только тогда, когда вы их выполняете, или он будет делать это для каждого замыкания, определенного в файле конфигурации при каждом запросе?

Кто-нибудь сравнивал время выполнения каждого метода?

Смотрите также:

1 ответ

Решение

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

С точки зрения влияния на производительность построения службы с использованием фабрики против закрытия, во-первых, вы должны помнить, что служба будет создаваться только один раз за запрос независимо от того, сколько раз вы запрашивали службу. Я провел быстрый тест получения службы с использованием замыкания и фабрики, и вот что я получил (я запускал несколько раз, и все результаты были примерно одинакового значения):

Closure: 0.026999999999999ns
Factory: 0.30200000000002ns

Это наносекунды, то есть 10-9 секунд. В основном разница в производительности настолько мала, что эффективной разницы нет.

Также ZF2 не может кэшировать всю конфигурацию моего модуля с замыканиями. Если я использую только фабрики, тогда вся моя конфигурация может быть объединена, кэширована и простой файл может быть прочитан по каждому запросу, вместо того, чтобы беспокоиться о загрузке и объединении файлов конфигурации каждый раз. Я не измерял это влияние на производительность, но думаю, что оно в любом случае незначительно.

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

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

Другие вопросы по тегам