Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2应用程序在每次请求时解析YML_Php_Performance_Symfony_Doctrine Orm_Yaml - Fatal编程技术网

Php Symfony2应用程序在每次请求时解析YML

Php Symfony2应用程序在每次请求时解析YML,php,performance,symfony,doctrine-orm,yaml,Php,Performance,Symfony,Doctrine Orm,Yaml,我的Symfony2应用程序存在一些性能问题,因此我对其运行了webgrind以查看发生了什么。结果是,每次请求都会解析大量的YML文件,我不知道为什么。我已经启用了APC缓存,所以我不知道它可能是什么。在此问题上的任何帮助都将不胜感激 编辑:这是我运行的webgrind的截图。 知道发生了什么事。我启用了APC并正在工作,但在autoload.php中没有使用ApcUniversalClassLoader。更多细节。当他们在文档中提到提高性能的“建议”时,他们的真正意思是“你必须这样做,否则你

我的Symfony2应用程序存在一些性能问题,因此我对其运行了webgrind以查看发生了什么。结果是,每次请求都会解析大量的YML文件,我不知道为什么。我已经启用了APC缓存,所以我不知道它可能是什么。在此问题上的任何帮助都将不胜感激

编辑:这是我运行的webgrind的截图。

知道发生了什么事。我启用了APC并正在工作,但在autoload.php中没有使用ApcUniversalClassLoader。更多细节。当他们在文档中提到提高性能的“建议”时,他们的真正意思是“你必须这样做,否则你的性能会很糟糕。”

根据我的研究,似乎APCClassLoader不会导致Symfony2缓存Doctrine中使用的YAML文件。默认情况下,它似乎会缓存配置文件(config.yml,parameters.yml),但不会缓存Doctrine使用的实际ORM YAML文件,除非您指定缓存驱动程序,如下面链接的文档所示:

因此,如果海报只有配置YAML而没有条令YAML,那么上述解决方案可能解决了这个问题。但是,如果涉及条令YAML,则必须指定条令缓存驱动程序

这也会影响使用注释的用户,因为除非指定了缓存驱动程序(默认数组缓存除外),否则在每次页面加载时都会解析注释

我认为我应该发布,因为这是一个复杂的问题,上面的答案在我的案例中是误导性的,因为YAML文件是缓存问题的根源

这篇文章详细介绍了我的具体问题和解决方案:


删除YML文件,使其无法加载(或者您认为w/o实际上没有提供具体信息的建议是什么?)。我可以提供哪些具体信息?webgrind给我的所有信息都是在每个请求上都调用了YML解析函数,我不知道到底解析了哪些文件。您是在生产模式下运行还是在开发模式下运行?在生产模式下,YML解析的结果被缓存。是的,当我运行webgrind时,我处于prod模式。我在下面回答了我自己的问题。我很惊讶启用APC会产生这样的效果。正如@Cerad提到的,YAML文件应该缓存在生产方法中,而不管您的类加载器缓存如何。我在没有任何类加载器缓存的情况下运行了symfony2,性能非常好(例如使用没有apcu的PHP opcache)?我运行的是2.3,在逐步阅读代码之后,我发现Doctrine使用默认的“数组缓存”,它会随着每个页面加载/实例而过期。在2.3中,除非您将此缓存方法更改为APC、memcached或其他选项,否则每次加载页面时都会解析条令元数据(即YAML orm文件)。也许2.5会改变这种行为。无论如何,我怀疑上面提到的APC变更对YAML也有任何影响。从我所看到的(以及从文档中),除非您专门将其配置为,否则条令不会使用APC。从文档中看,2.5还需要条令缓存驱动程序配置,所以您可能已经配置了此配置。我很好奇你的应用程序是否使用app/config/config.yml中ORM部分的默认设置运行,或者它是否配置为使用正确的缓存。嘿,@Nate Stone,您知道此doctring缓存是否也适用于表单验证yaml文件吗?根据此参考,文档似乎表明验证默认情况下使用APC:有一个相关的错误/功能线程,他们在其中讨论设置您自己的服务: