ray/compiler

Ray.Di 的依赖注入编译器

1.10.5 2024-05-10 11:55 UTC

README

依赖注入编译器

Scrutinizer Code Quality codecov Type Coverage Continuous Integration

Ray.Compiler 将 Ray.Di 绑定编译成 PHP 代码,提供性能提升,使依赖注入的速度更快。

脚本注入器

ScriptInjector 与 Ray.Di 注入器具有相同的接口;而 Ray.Di 注入器基于内存绑定解析依赖,ScriptInjector 执行预编译的 PHP 代码,速度更快。

Ray.Di 注入器

$injector = new Injector(new CarModule); // Ray.Di injector

Ray.Compiler 注入器

$injector = new ScriptInjector($tmpDir, fn => new CarModule);

预编译

在部署生产环境之前,您需要将所有依赖编译成代码。 DiCompiler 将所有绑定编译成 PHP 代码。

$compiler = new DiCompiler(new CarModule, $tmpDir);
$compiler->compile();

对象图可视化

对象图可以使用 dumpGraph() 进行可视化。HTML 图表文件将输出在 $tmpDir 下的 graph 文件夹中。

$compiler = new DiCompiler(new Module, $tmpDir);
$compiler->compile();
$compiler->dumpGraph();
open tmp/graph/Ray_Compiler_FakeCarInterface-.html

CompileInjector

CompileInjector 通过切换两个注入器,在开发和生产环境中提供最佳性能(开发中提升2倍,生产中提升10倍)。

根据应用程序的执行上下文,通过指定绑定和缓存来获取注入器。

$injector = new CompileInjector($tmpDir, $injectorContext);

$injectorContext 示例

__invoke() 方法中准备该上下文所需的模块。 getCache() 方法指定注入器自身的缓存。

在生产环境中安装 DiCompileModule。注入器更加优化,依赖错误在编译时而不是运行时报告。