8

在 Zend Framework 2 中使用工厂类或闭包更好吗?为什么?

我知道闭包不能序列化,但是如果你从 Module#getServiceConfig() 返回它们,这不会影响其余配置数据的缓存,并且闭包无论如何都会缓存在你的操作码缓存中。

构造工厂类与执行闭包的性能有何不同?PHP 是否仅在您执行闭包时包装和实例化闭包,还是会为每个请求的配置文件中定义的每个闭包执行此操作?

有没有人比较过每种方法的执行时间?

也可以看看:

4

1 回答 1

11

PHP 将在编译时将配置中的匿名函数转换为闭包类的实例,因此它会在每个请求上执行此操作。这与create_function在运行时创建函数不同。但是,由于闭包在编译时执行此操作,因此它应该在您的 opcache 缓存中,因此无关紧要。

就使用工厂与闭包构建服务的性能影响而言,首先您必须记住,无论您请求服务多少次,每次请求都只会构建一次服务。我运行了一个使用闭包和工厂获取服务的快速基准测试,这就是我得到的(我运行了几次,所有结果的值都差不多):

Closure: 0.026999999999999ns
Factory: 0.30200000000002ns

这些是纳秒,即10 -9秒。基本上性能差异是如此之小,以至于没有有效的差异。

ZF2 也不能用闭包缓存我的整个模块的配置。如果我使用纯工厂,那么我的整个配置可以被合并、缓存,并且可以在每个请求上读取一个简单的文件,而不必担心每次都加载和合并配置文件。我没有衡量这对性能的影响,但我猜无论如何它都是微不足道的。

但是,我更喜欢工厂主要是因为可读性和可维护性。对于工厂,您最终不会得到一些庞大的配置文件,其中到处都是大量的闭包。

当然,闭包非常适合快速开发,但如果您希望您的代码可读且可维护,那么我会说坚持使用工厂。

于 2013-10-21T00:00:47.680 回答