【问题标题】:ZendFramework 2 - painfully slow?ZendFramework 2 - 非常缓慢?
【发布时间】:2014-06-07 09:39:54
【问题描述】:

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

但是,对于开箱即用的示例应用程序,响应时间是 110 毫秒,这对我来说似乎很多。一个“静态”的 php 文件在大约 30 毫秒内提供。我并不是说这应该可以通过 php 框架循环通过侦听器等来实现,但是提供 > 100 毫秒的静态控制器和模板确实很慢。

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

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

【问题讨论】:

标签: php performance zend-framework2


【解决方案1】:

ZF2,由于其性质,每个请求都有大量的文件 IO。一个页面加载请求从数据库加载数据集并显示结果可能会导致打开大约 200 个 php 文件。 (运行 xdebug 缓存研究,您可以看到检查和打开文件花费了多少时间。这可能很重要。)

大多数被打开的内容都是“小”的,一旦从磁盘读取,执行速度非常快,但实际的文件 io 本身可能会导致严重的延迟。

在 PRODUCTION 中使用 ZF2 应用需要做的几件事:

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

2) 为您的项目本身生成一个自动加载类映射,并确保项目已配置为使用它。

3) 确保您在配置中设置了模板映射,这样 ZF2 就不必“假定”模板的位置,这会导致磁盘 IO。

4) 确保您有适当的操作码缓存解决方案,例如 Zend Opcache 或 APC(取决于您的 PHP 版本)。您将希望它设置为具有中期缓存超时(一个小时或更长时间),并且应该在生产中禁用文件统计。每次部署代码时都应该硬清除这个缓存(可以通过 apache 重启、脚本等来完成)。

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

这种组合为我带来了 ZF2 的“即时”页面加载。

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

【讨论】:

  • 我用过,但问题没有解决,cpu使用率仍然很高
猜你喜欢
  • 2010-10-24
  • 1970-01-01
  • 2021-11-11
  • 2019-08-11
  • 2010-10-31
  • 1970-01-01
  • 2013-07-11
  • 2016-08-22
  • 2018-07-04
相关资源
最近更新 更多