阅读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
?
答案 0 :(得分:0)
黄金标准'用于设置自动加载在生产中就像symfony文档所说的那样:composer dump-autoload --optimize --no-dev --classmap-authoritative
。
在开发中,这样的优化可能太多了,因为你编写的每个新类至少需要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
。