ZF2针对高流量进行优化

dir*_*ory 31 optimization performance zend-framework2

当超过3个用户同时使用它时,我的ZF2应用程序似乎非常慢.

我使用xdebug和webgrind来分析我的代码,而我的函数似乎很慢,所以它必须是zf2中的自我优化问题.

对于缓存我使用EvanDotPro的EdpSuperluminal模块,这似乎提高了应用程序的性能.

我们使用nginx反向代理,但也没有意义.

我需要一些好的建议来增加高流量的响应.我同时谈论30多个连接用户.

Sam*_*Sam 43

实现更快的应用程序的步骤很简单.总有三件事情可以考虑.

  1. 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
        ));
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. ZF2 Performance QuickTipp#2 - 类别地图自动加载 这可能是加速应用程序最重要的部分之一.就个人而言,我看到装载时间增加了40%.实现这一点非常简单:

    class Module 
    {
        public function getAutoloaderConfig()
        {
            return array(
               'Zend\Loader\ClassMapAutoloader' => array(
                    __DIR__ . '/autoload_classmap.php',
               ),
            );
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    所述autoload_classmap.php然后是一个简单的阵列'FQ-CLASSNAME' => 'FQ-FILEPATH'.使用ZF2的classmap_generator-utility可以很容易地自动执行此操作

  3. ZF2 Performance QuickTipp#3 - 让Module.php保持轻盈!可悲的是,这是一篇我还没有写过的帖子.这Module.php是一个在每个请求上加载的文件.很多人都忘掉了这一点,并在里面写了很多很多工厂.有一次,ZfcUser-Module.php就是不该做的一个例子.每个请求也会执行闭包或匿名函数.如果在整个项目中有太多的工作要做,这是相当多的工作要做.更好的方法是简单地编写Factory-Classes.ZfcUser后来更新了Module.php以使用此策略.

这就是人们可以做的所有简单的事情(我知道 - 我不太了解!:D).然而,有趣的是,开始使用3个用户,您的应用程序运行缓慢.根据我的经验,这与脚本本身无关,而是服务器问题.这是来自分期机还是本地?


Mic*_*ego 29

如果您使用的是Doctrine,请不要忘记为注释添加缓存.这大大提高了性能(当我激活此缓存时,我将加载时间几乎除以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'
            )
        ),
    )
)
Run Code Online (Sandbox Code Playgroud)

但是,在开发时非常不方便,因为每次映射更改时都必须清除缓存.


And*_*rew 27

如果你有一个大项目,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
Run Code Online (Sandbox Code Playgroud)