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

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

我需要在速度方面优化我的 symfony。托管服务器是 运行 php 7.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();

long question short:如果 autoload_classmap.php 已经很好地更新,启用 ApcClassLoader 可以提高我的表现吗?

请在这里阅读我的回答:Why use a PSR-0 or PSR-4 autoload in composer if classmap is actually faster?

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

作为一般规则:如果您进行优化,请先衡量您想要优化的任何内容,然后在您做某事之后,看看情况是否有所改善。

另请注意,"optimize in terms of speed" 并未准确描述您要改进的内容。是单个请求的响应时间吗?还是服务器在重负载下的响应时间?您是否首先对应用程序进行概要分析以找出时间花在了哪里?

您问的是一个非常具体的问题,涉及与 APC 相关的一种可能的解决方案以改进 "something",在 "optimizing" 自动加载之后没有告诉我们它是否有效 - 这听起来好像您没有正确测量和分析您的应用程序,但只需使用您遇到的任何承诺 "optimize".