2

阅读 Symfony2 性能文档:http ://symfony.com/doc/2.8/performance.html

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

4

2 回答 2

3

正如 symfony 文档所说,在生产环境中设置自动加载的“黄金标准” : composer dump-autoload --optimize --no-dev --classmap-authoritative.

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

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

一旦类映射被写入磁盘一次,然后再读回,它无论如何都可以通过 OpCache 使用,因此它实际上已经在 PHP 进程空间内以实现最大速度。

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

于 2017-03-05T18:49:08.820 回答
2

--classmap-authoritative隐式启用--optimize。所以,这样的命令就足够了composer dump-autoload --no-dev --classmap-authoritative。但是使用--classmap-authoritative你可以获得class not found异常。如果您安装了 APCu,则可以使用composer dump-autoload --no-dev --optimize --apcu.

于 2019-11-21T15:21:47.607 回答