我ZF2应用似乎是极其缓慢的,当3级以上的用户在同一时间使用它。
我分析我的代码在我的职务了XDebug和webgrind和非似乎是缓慢的,因此必须是ZF2内的optimalisation问题,它的自我。
对于缓存我使用由EvanDotPro的EdpSuperluminal模块,这似乎增加了应用程序的性能。
我们利用Nginx的反向代理,但并没有什么意义,以及。
我需要一些好的建议加大对高流量的响应。 我说在同一时间约30+连接的用户。
我ZF2应用似乎是极其缓慢的,当3级以上的用户在同一时间使用它。
我分析我的代码在我的职务了XDebug和webgrind和非似乎是缓慢的,因此必须是ZF2内的optimalisation问题,它的自我。
对于缓存我使用由EvanDotPro的EdpSuperluminal模块,这似乎增加了应用程序的性能。
我们利用Nginx的反向代理,但并没有什么意义,以及。
我需要一些好的建议加大对高流量的响应。 我说在同一时间约30+连接的用户。
有一些非常简单的步骤,以实现更快的应用程序。 还有那总是可以考虑三两件事。
ZF2性能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性能QuickTipp#2 -类映射自动加载 ,这可能是加速你的应用程序中最重要的部分之一。 个人而言,我已经看到了高达40%的LoadingTimes的增加。 实现这个很简单:
class Module { public function getAutoloaderConfig() { return array( 'Zend\Loader\ClassMapAutoloader' => array( __DIR__ . '/autoload_classmap.php', ), ); } }
所述autoload_classmap.php
然后是一个简单的数组'FQ-CLASSNAME' => 'FQ-FILEPATH'
。 这可以很容易地被automatted 使用ZF2的classmap_generator效用
ZF2性能QuickTipp#3 - 保持Module.php光! 可悲的是这是一个后我还没有恢复过来又写。 该Module.php
是在每一个请求加载的文件。 很多人都忘记了这一点,并写很多很多在他们里面的工厂。 在一个点上, ZfcUser-Module.php是什么不该做的例子。 闭包或匿名函数在每次请求执行了。 这是如果有在整个项目太多的工作要做相当多的工作。 更好的方法是简单地写工厂类 。 ZfcUser后更新Module.php使用这种策略。
这就是几乎所有的简单的东西可以做到(我知道 - 我不知道多少!d)。 然而什么声音有趣的是,在开始使用你的应用程序运行速度慢3个用户。 据我的经验,这已无关的脚本本身,而是而是一个服务器的问题。 这是从暂存计算机或本地?
如果您使用的原则,不要忘记加上缓存的注释。 这极大地提高性能(当我激活该缓存我用两个加载时间几乎划分)。 如果您正在使用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
另外,如果您使用的是作曲家(你应该做的),那么你可以用作曲生成所有的模块和dependdencies的类映射过这甚至更好:
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,所以它是有用的知道它,使用它。
基准给出9X在简单的框架应用程序的性能提升(Symfony2的测试- http://www.ricardclau.com/2013/03/apc-vs-zend-optimizer-benchmarks-with-symfony2/ )。
我用它为我ZF2 + doctrine2 + zfcUser应用。 Memcached是用于doctrine2目的,它提供了业绩增长只有5%左右。 因此,与ZendOp +我得到了6倍的增长 - 简单的页面和3倍的增加(0.2 - 0.06)(0.2> 0.03秒),对于有很多的形式,实体意见复杂的页面。 如果我使用类映射发生器,我会更新的答案。
另一个问题是使用的nginx + PHP-FPM,而不是的Apache2 +模块。 它节省服务器资源。