ZF2优化的高流量(ZF2 Optimize for high traffic)

2019-07-19 04:23发布

我ZF2应用似乎是极其缓慢的,当3级以上的用户在同一时间使用它。

我分析我的代码在我的职务了XDebug和webgrind和非似乎是缓慢的,因此必须是ZF2内的optimalisation问题,它的自我。

对于缓存我使用由EvanDotPro的EdpSuperluminal模块,这似乎增加了应用程序的性能。

我们利用Nginx的反向代理,但并没有什么意义,以及。

我需要一些好的建议加大对高流量的响应。 我说在同一时间约30+连接的用户。

Answer 1:

有一些非常简单的步骤,以实现更快的应用程序。 还有那总是可以考虑三两件事。

  1. 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 )); } 
  2. 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效用

  3. ZF2性能QuickTipp#3 - 保持Module.php光! 可悲的是这是一个后我还没有恢复过来又写。 该Module.php是在每一个请求加载的文件。 很多人都忘记了这一点,并写很多很多在他们里面的工厂。 在一个点上, ZfcUser-Module.php是什么不该做的例子。 闭包或匿名函数在每次请求执行了。 这是如果有在整个项目太多的工作要做相当多的工作。 更好的方法是简单地写工厂类 。 ZfcUser后更新Module.php使用这种策略。

这就是几乎所有的简单的东西可以做到(我知道 - 我不知道多少!d)。 然而什么声音有趣的是,在开始使用你的应用程序运行速度慢3个用户。 据我的经验,这已无关的脚本本身,而是而是一个服务器的问题。 这是从暂存计算机或本地?



Answer 2:

如果您使用的原则,不要忘记加上缓存的注释。 这极大地提高性能(当我激活该缓存我用两个加载时间几乎划分)。 如果您正在使用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'
            )
        ),
    )
)

然而,它在开发非常方便,因为您必须清除缓存时,您的映射变化。



Answer 3:

在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


Answer 4:

上述所有和使用某种指令缓存像APC / Opcache它会加快速度的。 但是,是ZF 2似乎是很慢的不幸更慢则ZF 1 :(

另外,模块配置缓存加速的东西,你不能有任何的封锁,虽然做这方面的工作;)

http://hounddog.github.io/blog/performance-in-zend-framework-2/



Answer 5:

首先要加速你的应用程序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 +模块。 它节省服务器资源。



文章来源: ZF2 Optimize for high traffic