2

我已经看到许多框架在 php 中实现了 DI。但是,由于 php 中的所有对象都是在单个请求的生命周期内创建和销毁的,我想知道这会如何影响性能。

通常,您将在 DI 容器内定义许多对象。在 php 中,即使 Controller 不需要这些对象中的大部分,它们仍然会被实例化。此外,如果您在 php 文件中声明 DI 依赖项,您将加载所有引用的脚本。没有 DI,你只加载你需要的东西。

我已经看到一些框架允许惰性 DI,所以这应该有助于不需要的实例化。也许分割 DI 也是解决第一个问题的一种方法。那么,DI 是否会对我的 php 应用程序性能产生不利影响,我应该如何在 php 中实现 DI 以使其不会发生?

4

2 回答 2

0

通常,您将在 DI 容器内定义许多对象。在 php 中,即使 Controller 不需要这些对象中的大部分,它们仍然会被实例化。

好吧,还有延迟初始化,所以这些对象只是轻量级占位符,如果需要功能,只在需要时创建大对象。

那么,DI 是否会对我的 php 应用程序性能产生不利影响,我应该如何在 php 中实现 DI 以使其不会发生?

每一行代码都会影响应用程序的性能,所以无论你做什么,你都需要处理它。如果你真的关心性能,你应该从缓存应用程序的输出开始,这样除非你需要,否则不需要加载任何代码。

于 2012-04-12T18:44:07.127 回答
0

你必须确定是否有问题,然后是什么问题。

  • 您是否有需要大量资源和时间来构建的依赖项?

您可以使用惰性注入,例如:

class Class1 {
    /**
     * @Inject(lazy=true)
     * @var Class2
     */
    private $class2;

    public function doSomething() {
        // The dependency is loaded NOW
        return $this->class2->getSomethingElse();
    }

(来自PHP-DI 的示例)

  • 你的类中有太多的依赖项吗?

您必须问自己,依赖注入是否真的是问题所在。如果您在哪里创建新实例(或使用单例)而不是使用 DI,问题会消失吗?(我不这么认为)

IMO 性能考虑应明确指出 DI 是问题所在。应用程序中有很多部分可能出错。

于 2012-10-07T09:40:30.223 回答