ZendFramework 2 - 痛苦地慢?

时间:2014-06-07 09:39:55

标签: php performance zend-framework2

我已经在我的网络服务器上安装了ZendSkelletonApp,它运行php-fpm(5.5+,因此启用了opcache)和apache。

然而,响应时间是 - 对于开箱即用的示例应用程序 - 110ms,这对我来说似乎很多。 A"静态" php文件在~30ms内提供。我并不是说这应该可以通过一个php框架循环通过监听器和诸如此类的东西,但是服务一个静态控制器&模板> 100毫秒真的很慢。

即使在application.config.php中生成类和模板映射(http://akrabat.com/zend-framework-2/using-zendloaderautoloader/)并启用模块和配置缓存,我也无法达到100毫秒以下。

还有其他方法可以提高zf2的性能吗?

1 个答案:

答案 0 :(得分:3)

ZF2由于其性质,每个请求都有很多文件IO。使用doctrine从数据库加载数据集并显示结果的单页加载请求可能导致打开大约200个php文件。 (运行xdebug缓存研磨,你可以看到花了多少时间检查和打开文件。它可能是实质性的。)

正在打开的大部分内容都是"小,"一旦它被磁盘读取,它就会非常快速地执行,但实际的文件可能会导致严重的延迟。

在PRODUCTION中使用ZF2应用程序需要完成的一些事情:

1)运行" composer dump-autoload -o"这将缓存供应商目录的完整自动加载映射。这使自动加载系统不必运行" file_exists()"在包含所需文件之前。

2)为项目本身生成自动加载类图,并确保项目已配置为使用它。

3)确保您已在配置中设置了模板地图,因此ZF2不必承担"假设"模板的位置,这会导致磁盘IO。

4)确保你有一个操作码缓存解决方案,如Zend Opcache或APC(取决于你的PHP版本)。您需要将其设置为具有中期缓存超时(一小时或更长时间),并且应在生产中禁用文件统计信息。每次部署代码时都应该清除此缓存(可以通过apache restart,脚本等完成)。

5)如果您正在使用依赖于注释的任何内容,例如Doctrine等,您必须确保缓存注释。 APC是一个很好的解决方案,但即使是文件缓存也比没有缓存好得多。解析这些注释非常昂贵。

这种组合导致"瞬间"为我加载ZF2的页面。

在开发过程中,不要过多地出汗。如果需要,请安装操作码缓存,但要确保它们将使用统计文件来检查它们是否已更改...否则它将忽略您对文件所做的更改。