我的 Symfony2 应用程序有一些性能问题,所以我在它上面运行了一个 webgrind 来看看发生了什么。原来它在每个请求上都解析了大量的 YML 文件,我不知道为什么。我已经启用了 APC 缓存,所以我不知道它可能是什么。对此问题的任何帮助将不胜感激。
编辑:这是我运行的 webgrind 的屏幕截图。
我的 Symfony2 应用程序有一些性能问题,所以我在它上面运行了一个 webgrind 来看看发生了什么。原来它在每个请求上都解析了大量的 YML 文件,我不知道为什么。我已经启用了 APC 缓存,所以我不知道它可能是什么。对此问题的任何帮助将不胜感激。
编辑:这是我运行的 webgrind 的屏幕截图。
根据我的研究,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 缓存驱动程序。
这也会影响使用注释的人,因为除非指定了缓存驱动程序(Doctrine 默认数组缓存除外),否则它们将在每次页面加载时被解析。
认为我应该发布,因为这是一个复杂的问题,并且上面的答案在我的案例中具有误导性,因为 Doctrine ORM YAML 文件是缓存问题的根源。
这篇文章有更多关于我的具体问题和解决方案的详细信息:
弄清楚发生了什么。我启用并工作了 APC,但没有在我的 autoload.php 中使用 ApcUniversalClassLoader。更多细节在这里。当他们在文档中说提高性能的“建议”时,他们的真正意思是“你必须这样做,否则你的表现会很糟糕”。