代码之家  ›  专栏  ›  技术社区  ›  Quasipickle

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

  •  1
  • Quasipickle  · 技术社区  · 6 年前

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

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sven    6 年前

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

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

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

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