我已经看到很多框架在php中实现了DI。但是,由于php中的所有对象在单个请求的生命周期内都被创建和销毁,我想知道这会如何影响性能。
通常,您将在DI容器中定义许多对象。在php中,即使Controller不需要大多数这些对象,它们仍然会被实例化。 此外,如果您在php文件中声明DI依赖项,则将加载所有引用的脚本。没有DI,你只需要加载你需要的东西。
我已经看到一些框架允许延迟DI,所以这应该有助于不需要的实例化。也许分段DI也是解决第一个问题的一种方法。 那么,DI会对我的php应用程序性能产生不利影响吗?我应该如何在php中实现DI,这样才不会发生?
答案 0 :(得分:0)
通常,您将在DI容器中定义许多对象。在php中,即使Controller不需要大多数这些对象,它们仍然会被实例化。
嗯,还有延迟初始化,因此这些对象只是轻量级占位符,如果需要功能,只有在需要时才会创建大对象。
那么,DI会对我的php应用程序性能产生负面影响吗?我应该如何在php中实现DI,这样才不会发生?
每行代码都会影响应用程序性能,因此无论您做什么,都需要处理它。如果你真的关心性能,你应该从缓存应用程序的输出开始,这样就不需要加载任何代码,除非你需要。
答案 1 :(得分: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是问题所在。在应用程序中有很多部分可能出错。