当超过 3 个用户同时使用我的 ZF2 应用程序时,它似乎非常慢。
我用 xdebug 和 webgrind 分析我的代码,我的函数中的非函数似乎很慢,所以它必须是 zf2 中的一个优化问题。
对于缓存,我使用了 EvanDotPro 的 EdpSuperluminal 模块,这似乎提高了应用程序的性能。
我们使用 nginx 反向代理,但也没有任何意义。
我需要一些好的建议来增加对高流量的响应。我同时谈论大约 30 多个连接用户。
当超过 3 个用户同时使用我的 ZF2 应用程序时,它似乎非常慢。
我用 xdebug 和 webgrind 分析我的代码,我的函数中的非函数似乎很慢,所以它必须是 zf2 中的一个优化问题。
对于缓存,我使用了 EvanDotPro 的 EdpSuperluminal 模块,这似乎提高了应用程序的性能。
我们使用 nginx 反向代理,但也没有任何意义。
我需要一些好的建议来增加对高流量的响应。我同时谈论大约 30 多个连接用户。
有几个非常简单的步骤可以实现更快的应用程序。总是可以考虑三件事。
ZF2 Performance QuickTipp #1 - ViewModels 始终手动分配完全限定的脚本以进行渲染。这将稍微提高性能。它是这样完成的:
public function someAction()
{
$viewModel = new ViewModel();
$viewModel->setTemplate('MODULE / CONTROLLER / ACTION.phtml');
// In this given example: $viewModel->setTemplate('foo/bar/some.phtml');
// Do some other Controller-logic as used to
return $viewModel->setVariables(array(
//key-value-paired view-variables
));
}
ZF2 Performance QuickTipp #2 - Classmap Autoloading 这可能是加快应用程序速度的最重要部分之一。就我个人而言,我看到加载时间增加了高达 40%。实现这一点非常简单:
class Module
{
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
),
);
}
}
then 是一个简单的autoload_classmap.php
数组'FQ-CLASSNAME' => 'FQ-FILEPATH'
。这可以很容易地使用 ZF2 的 classmap_generator-utility 自动化
ZF2 Performance QuickTipp #3 - 保持 Module.php 轻巧!可悲的是,这是一篇我还没来得及写的帖子。这Module.php
是一个在每个请求上加载的文件。很多人忘记了这一点,在里面写了很多很多的工厂。在某一时刻,ZfcUser-Module.php是一个不该做的例子。闭包或匿名函数也会在每个请求上执行。如果整个项目中有太多的人,这是相当多的工作要做。更好的方法是简单地编写Factory-Classes。ZfcUser 后来更新了 Module.php来使用这个策略。
这几乎是一个人可以做的所有简单的事情(我知道 - 我知道的不多!:D)。然而,有趣的是,开始使用 3 个用户时,您的应用程序运行缓慢。根据我的经验,这与脚本本身无关,而是服务器问题。这是来自登台机器还是本地?
如果您使用 Doctrine,请不要忘记为注释添加缓存。这极大地提高了性能(当我激活这个缓存时,我几乎将加载时间除以二)。如果你使用 DoctrineORMModule:
'doctrine' => array(
'driver' => array(
'cache' => array(
'class' => 'Doctrine\Common\Cache\ApcCache'
),
'configuration' => array(
'orm_default' => array(
'metadata_cache' => 'apc',
'query_cache' => 'apc',
'result_cache' => 'apc'
)
),
)
)
但是,在开发过程中非常不方便,因为您必须在映射更改时清除缓存。
如果您有一个大型项目,ZF2 类映射生成器将为您提供很大的帮助:
http://framework.zend.com/manual/2.0/en/modules/zend.loader.classmap-generator.html
或者,如果您正在使用 composer(您应该这样做),那么您也可以使用 composer 为您的所有模块和依赖项生成类映射,这样会更好:
php composer.phar install --optimize-autoloader
php composer.phar update --optimize-autoloader
以上所有内容并使用某种操作码缓存(如 APC / Opcache)将加快速度。但是是的,ZF 2 似乎很慢,不幸的是比 ZF 1 更慢 :(
模块配置缓存也加快了速度,但你不能有任何闭包来使它工作;)
http://hounddog.github.io/blog/performance-in-zend-framework-2/
首先要加速您的 zf2 应用程序,您应该使用ZendOptimizerPlus。大部分执行时间用于读取和预编译 php 代码。典型的 ZF2 应用程序有很多文件,因此处理它们需要很长时间。
ZendOp+ 将您的 php 应用程序的字节码保存在共享内存中,因此服务器不会读取大量文件,也不会在每个请求中解析它。ZendOp+ 将默认为 php5.5,因此了解它并使用它很有用。
基准测试使简单框架应用程序的性能提高了 9 倍(symfony2 测试 - http://www.ricardclau.com/2013/03/apc-vs-zend-optimizer-benchmarks-with-symfony2/)。
我将它用于我的 zf2 + 学说 2 + zfcUser 应用程序。Memcached 用于学说 2 的目的,它只提供大约 5% 的性能提升。因此,使用 ZendOp+,简单页面增加了 6 倍(0.2 -> 0.03 秒),具有大量表单、实体和视图的复杂页面增加了 3 倍(0.2 - 0.06)。如果我使用类图生成器,我会更新答案。
另一个问题是使用 nginx + php-fpm 而不是 apache2+module。它节省了服务器资源。