symfony 2.8优化:我还需要使用APCClassLoader吗


symfony 2.8 optimization: do I still need to use APCClassLoader?

我需要在速度方面优化我的符号。托管服务器正在运行php7.x.x,并且已启用opcache。apc_u扩展被禁用,但如果真的需要,我可以要求启用它。

我现在正在做的是呼叫:

composer dump-autoload --optimize

每当我部署应用程序时。这样,应用程序应该已经拥有了所需的所有映射,而不必迭代文件夹(对吧?)。我想知道如果autoload_classmap.php已经很好地更新了,ApcClassLoader是否可以提高我的性能。

这是我的app.php第一行:

use Symfony'Component'HttpFoundation'Request;
/**
 * @var Composer'Autoload'ClassLoader
 */
$loader = require __DIR__.'/../app/autoload.php';
include_once __DIR__.'/../app/bootstrap.php.cache';
// Enable APC for autoloading to improve performance.
// You should change the ApcClassLoader first argument to a unique prefix
// in order to prevent cache key conflicts with other applications
// also using APC.
/*
$apcLoader = new Symfony'Component'ClassLoader'ApcClassLoader(sha1(__FILE__), $loader);
$loader->unregister();
$apcLoader->register(true);
*/
$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();

长话短说:如果autoload_classmap.php已经很好地更新了,启用ApcClassLoader能提高我的性能吗?

请阅读我的答案:如果类映射实际上更快,为什么要在composer中使用PSR-0或PSR-4自动加载?

您必须评估是否转储应用程序中所有类的类映射实际上会提高或降低速度。如果类映射转储中有太多的类,那么最终会将一个巨大的数组从操作码缓存移动到内存中,这对操作码缓存(它占用了一定的内存,可能会踢出其他代码)和运行任何脚本所需的内存量都是不利的。

一般来说:如果你进行了优化,先测量你想优化的东西,然后在你做了一些事情之后,看看情况是否有所改善。

还要注意,"根据速度进行优化"并不是对您想要改进的内容的精确描述。是单个请求的响应时间吗?还是服务器在重负载下的响应时间?您是否先对应用程序进行了配置,以了解时间花在哪里?

你问了一个非常具体的问题,关于一个与APC有关的可能的解决方案,以改进"某些东西",在"优化"自动加载后,却没有告诉我们这是否有效——这一切听起来都像是你没有正确地测量和分析你的应用程序,而是简单地使用你遇到的任何承诺"优化"的东西。