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

时间:2018-04-20 16:11:32

标签: php composer-php autoload

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

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

1 个答案:

答案 0 :(得分:1)

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

  1. Composer会创建一些包含配置数据的文件以执行自动加载。即使对于大型场景,此代码也可能是最优化的代码,如果PHP运行时具有更强大的功能(如PHP 5.6及更高版本),则使用不同的例程。因此,最后,可能需要从磁盘读取三个或四个文件并执行。
  2. PHP使用Opcache(如果你喜欢性能,你不应该禁用它)。自动加载的所有文件都放在Opcache中。因此,多次执行它们会被缓存,并且尽可能快。使用PHP 5.6及更高版本时,配置数组是静态定义的,因此它的最终形式已经缓存,没有任何运行时PHP代码执行。
  3. 如果您使用三个独有的自动加载器,您可能会将Opcache中使用的空间量增加近三倍。这是有价值的记忆,不能用于别的东西。
  4. 无论自动加载定义和添加的库数量如何,自动加载机制都只会加载确切知道所用类代码所需的文件。如果您只使用SMTP传输,PHP将不会加载WHOLE Swiftmailer类。
  5. 优化性能是一件好事。但是,您需要进行测量以查看时间的使用情况,并且需要对代码进行分析,以便了解提高性能的有用之处。一个可以从25毫秒减少到22毫秒的函数调用不是一个有价值的目标 - 除非在循环中调用100.000次。

    我非常确定自动加载不是任何性能问题的根源 - 但是从长远来看,处理三种或更多种不同的自动加载配置会产生维护问题。