我的Symfony2应用程序存在一些性能问题,因此我在其上运行了一个webgrind以查看发生了什么。原来它是在每个请求上解析大量的YML文件,我无法弄清楚原因。我已经启用了APC缓存,所以我不知道它可能是什么。对此问题的任何帮助将不胜感激。
编辑:这是我跑过的网页大战的截图。
答案 0 :(得分:2)
根据我的研究,似乎APCClassLoader不会导致Symfony2缓存Doctrine中使用的YAML文件。它似乎默认缓存配置文件(config.yml,parameters.yml),但Doctrine使用的实际ORM YAML文件不会被缓存,除非您指定一个缓存驱动程序,如下面链接的文档中所示:
http://symfony.com/doc/2.3/reference/configuration/doctrine.html#caching-drivers
因此,如果海报只有YAML配置而不是YAML原则,那么上述解决方案可能会解决问题。但是,如果涉及Doctrine YAML,则必须指定Doctrine缓存驱动程序。
这也会影响使用Annotations的人,因为除非指定了缓存驱动程序(Doctrine默认数组缓存除外),否则将在每次页面加载时解析它们。
我认为我应该发帖,因为这是一个复杂的问题,上面的答案在我的案例中误导了Doctrine ORM YAML文件是缓存问题的根源。
这篇文章详细介绍了我的具体问题和解决方案:
Why is Symfony2 app spending 70-90% of its time parsing YAML?
答案 1 :(得分:1)
弄清楚发生了什么。我启用了APC并且正在工作,但是我的autoload.php中没有使用ApcUniversalClassLoader。更多细节here。当他们在文档“建议”中说出改进的表现时,他们的确意味着“你必须这样做,否则你的表现会很糟糕。”