yrv/autoloader

最快的自动加载器

dev-master 2024-08-15 17:21 UTC

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 实现了具有多态文件的功能,则不会在自动加载期间包含它。