如何使用 Composer 自动加载单个库

How to autoload a single library with Composer

我已经为我的 PHP 项目安装了 3 个带有 Composer 的库。但是,我不需要为所有 3 个库为每个页面加载设置自动加载。

有没有办法只在我需要时为库设置自动加载?因此,我可以调用 vendor/autoload-swiftmailer.php,而不是在每次加载页面时调用 vendor/autoload.php

在使用 Composer 时有选择地使用不同配置的自动加载器是没有意义的。原因如下:

  1. Composer 创建一些包含配置数据的文件来执行自动加载。即使对于大型场景,这段代码也可能是最优化的代码,如果 PHP 运行 时间具有更强大的功能(如 PHP 5.6 及更高版本),则使用不同的例程。所以最后大概要从磁盘读取三四个文件执行。
  2. PHP 使用 Opcache(如果您喜欢性能,则不应禁用它)。所有用于自动加载的文件都放在 Opcache 中。所以多次执行它们被缓存,并且尽可能快。使用 PHP 5.6 及更高版本时,配置数组是静态定义的,因此它的最终形式已经缓存,无需任何 运行 时间 PHP 代码执行。
  3. 如果您使用三个独占自动加载器,您可能会将 Opcache 中使用的 space 数量增加近三倍。这是宝贵的记忆,不能用于其他用途。
  4. 无论自动加载定义和添加的库数量如何,自动加载机制只会准确加载了解正在使用的 类 代码所需的文件。如果您只使用 SMTP 传输,PHP 将不会加载整个 Swiftmailer 类。

优化性能是一件好事。但是您需要进行测量以查看时间被用在了哪些地方,并且您需要分析您的代码以了解哪些地方对提高性能有用。一个可以从 25 毫秒减少到 22 毫秒的函数调用不是一个值得追求的目标——除非它在一个循环中被调用 100.000 次。

我很确定自动加载不是任何性能问题的根源 - 但处理三个或更多不同的自动加载配置将在长期 运行.

中产生维护问题