symfony性能问题

yau*_*ros 1 performance symfony

我正在使用symfony 2.8.12在2个不同的项目中工作并遇到同样的问题:性能.

加载时间太长(不是所有时间,但大部分时间),当我看到探查器时,总会有一个"有罪的组件":它可以是防火墙,控制器,配置文件监听器,内核响应. ..执行时间为几秒钟(有时长于10秒).

示例案例 示例案例2

在不同的线程中读取我试图将db设置为修复ip(如果它是一个dns查找问题),修改了php.ini中的一些参数但没有改变.这在我的本地和远程环境中都很重要,它甚至启用了PHP加速和OPCache.

我对我的代码没有做任何特别的事情,即使我在"你好世界"的页面中长时间玩,这有点令人沮丧:)

Grz*_*uze 11

发生这种情况是因为symfony在开始打印"Hello world"之前有数千个文件需要阅读.实际上,您的硬盘驱动器对symfony的效率影响最大.幸运的是,实现一些令人满意的水平几乎没有简单的步骤.

  1. PHP.ini:
    将这两个参数设置为比默认值高得多的值,即
    realpath_cache_size = 4096k
    realpath_cache_ttl = 7200
  2. dump composer autoload:
    composer dump-autoload --optimize- 这会创建带有已加载类的转储文件
  3. 我不知道你如何使用opcache,但我鼓励你安装apcu模块.之后在symfony中使用元数据缓存config_prod.yml:
    doctrine:
    orm:
        metadata_cache_driver: apc
        result_cache_driver: apc
    
  4. 您的web/app.php看起来应该有一些额外的行与常规行相比:

    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\ClassLoader\ApcClassLoader;
    
    $loader = require __DIR__.'/../app/autoload.php';
    include_once __DIR__.'/../app/bootstrap.php.cache';
    
    $apcLoader = new ApcClassLoader(md5($_SERVER['HTTP_HOST']), $loader);
    $loader->unregister();
    $apcLoader->register(true);
    
    require_once __DIR__.'/../app/AppCache.php';
    $kernel = new AppKernel('prod', false);
    $kernel->loadClassCache();
    $kernel = new AppCache($kernel);
    Request::enableHttpMethodParameterOverride();
    $request = Request::createFromGlobals();
    $response = $kernel->handle($request);
    $response->send();
    $kernel->terminate($request, $response);
    
    Run Code Online (Sandbox Code Playgroud)

其他但也非常重要:

  1. 使用PHP 7,它具有显着的效率提升,
  2. 将PHP与FPM结合使用(FastCGI进程管理器)
  3. 使用No SQL解决方案来缓存查询,即Redis,Elasticsearch
  4. 禁用xdebug - 确保探查器不显示您使用它.

实际上这个列表很长,但是在最常见的情况下,前4点加上第8点就可以了.我希望它会有所帮助.