php - ZendFramework 2 - 慢得令人痛苦?

标签 php performance zend-framework2

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

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

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

是否有任何其他方法可以提高 zf2 的性能?

最佳答案

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

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

在生产中使用 ZF2 应用程序需要做的几件事:

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

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

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

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

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

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

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

关于php - ZendFramework 2 - 慢得令人痛苦?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24095868/

相关文章:

php - Zend框架2 : passing variables ("options") to form using formelementmanager

php - Zend Framework 2 上的模块和模型组织

php - 使用默认值将 NULL 插入 NOT NULL 列

PHP MYSQL ROW UPDATE BY 加 1

javascript - 如何增加所见即所得编辑器的高度?

php - 如何使用 php 处理 mongoDB 中的 "datetime"?

MySQL 月和年分组性能低下

C++ 写入 csv,性能

php - 如何在索引前添加下划线?

php - 来自远程客户端和 SSL 的 file_get_contents