yrv / autoloader
最快的自动加载器
dev-master
2024-08-15 17:21 UTC
Requires
- php: >=8.1
Requires (Dev)
- phpunit/phpunit: 11.4.x-dev
This package is auto-updated.
Last update: 2024-09-15 17:26:59 UTC
README
这是一个基于文件作曲映射的替代超级快速类自动加载器。
为了其操作,对 composer.json
文件中指定的所有资源进行初步扫描。
一个重要特性是排除愚蠢的强制包含。如果指定的包含中包含显式的函数和常量,它们将与使用它们的类一起动态加载。
例如
如果文件包含对类、接口、特性、函数和常量的依赖,那么它们都将按正确顺序一次性加载,因为预编译递归收集所有这些依赖到单个文件中。
自动加载器非常快,但在更改依赖关系时需要重新编译,因此不适合开发。但是,您可以在初始化时指定一个 composer 文件。如果这失败了,标准 composer 将被 sed,并将找不到类的消息发送到 STDERR。
在生产环境中非常有效。效率是 composer 自动加载器的 5-10 倍。同时,内存使用量最小,不依赖于项目中类的数量。
为了获得最佳性能,请启用 APCU
准备中
为了使用,您需要生成包含所有依赖项的缓存。
- 对于默认参数,只需运行
dump.php
> php dump.php
- 对于自定义选项使用示例
$scanner = new Scanner( $projectDir, $cacheDir = $projectDir. '/_cache' // optional ); // For debug output $scanner->setErrorStream(fopen('php://stderr', 'w+')); $scanner->scanComposerFile( $projectDir . '/composer.json', //Main composer config true, // include the preliminary scripts specified in the config true // add develop classes for scan ); $scanner->scanAllComposerFiles( $projectDir . '/vendor', // Directory for search composer config files false // include the preliminary scripts specified in the config ); // Start scanning $scanner->run();
用法
将 vendor/yrv/autoloader/run.php
包含到您的项目中,而不是 vendor/autoload.php
<?php $root = dirname(__DIR__); require '../vendor/yrv/autoloader/src/Resolver.php'; \YRV\Autoloader\Resolver::init( $root, // Root folder of project $root.'/_cache', // Cache folder, optional '../vendor/autoload.php' // Alternative autoloader, optional ); $app = new \App\App($root); ...
警告!!!
不支持包含逻辑
如果某些库在包含中执行一些逻辑操作,则项目可能无法工作。要解决问题 - 您需要在主 composer.json 中注册包含列表。
准备取决于环境
在扫描和创建缓存时,会考虑安装版本的本地功能。因此,如果 PHP 实现了具有多态文件的功能,则不会在自动加载期间包含它。