在Symfony2中,哪种类路径缓存方法更具性能:使用APCu的Composer类映射或ApcClassLoader?

时间:2017-01-11 05:37:39

标签: symfony composer-php php-7 apcu

阅读Symfony2绩效文档:http://symfony.com/doc/2.8/performance.html

我试图找出哪种解决方案更适合缓存类名路径。我使用的是PHP7,因此APC不可用,只有apcu和opcache。鉴于我在实现缓存或不得不重新启动Web服务器的复杂性方面没有任何问题,哪个性能最高?此外,如果我使用APC Autoloader,app.php代码仍然必须首先加载composer autoload.php,创建ApcClassLoader,然后取消注册初始自动加载器。清除类映射是否有意义,以便未使用的映射不会浪费那么多内存,即运行:composer dump-autoload --no-dev

2 个答案:

答案 0 :(得分:0)

黄金标准'用于设置自动加载在生产中就像symfony文档所说的那样:composer dump-autoload --optimize --no-dev --classmap-authoritative

  • - 优化转储您应用中使用的每个PSR-0和PSR-4兼容类。
  • - no-dev 排除开发环境中仅需要的类(例如测试)。
  • - classmap-authoritative 阻止Composer扫描文件系统中没有在类映射中找到的类。

在开发中,这样的优化可能太多了,因为你编写的每个新类至少需要composer dump-autoload - 并且灵活性更有用。

一旦将类映射写入光盘一次,然后再读回,它就可以通过OpCache获得,因此它实际上已经在PHP进程空间内以获得最大速度。

为了使用OpCache增加一些额外的速度,你可以做的另一件事就是阻止它检查缓存文件的修改 - 可以通过设置opcache.validate_timestamps = false来关闭它。如果文件被更改,那么您将不得不重新启动PHP服务器(如果使用mod_php,则需要重启php-fpm或Apache),否则会使OpCache缓存无效。

答案 1 :(得分:0)

-classmap-authoritative 隐式启用-optimize 。因此,composer dump-autoload --no-dev --classmap-authoritative就足够了。但是使用-classmap-authoritative ,您可以获得class not found异常。如果已安装APCu,则可以使用composer dump-autoload --no-dev --optimize --apcu