>每次称呼,都会使用“注入”数据库对象创建一个用户对象。
>尽管所有容器都支持不同的功能,但该基准测试将涵盖依赖项注入容器所需的基本功能。也就是说,创建对象并注入需要的依赖性。
将测量依赖注入的哪些方面?执行时间
此测试使用每个容器创建一个简单的对象10,000倍
没有依赖注入容器,这将写为:
如您所见,这里有两个清晰的营地。 Aura,Dice和Orno的速度大约比PHP-DI,Symfony和Zenddi快十倍。
<span>$user = new User(new Database());</span>类似于执行时间,有两个截然不同的群体,在中间的某个地方坐着。
>这是每个容器的轻量级,并且在解释内存使用差异方面有些轻巧。应该注意的是,Zenddi使用的许多文件都是常见的框架文件,因此,如果您使用Zend Framework,那么使用Zenddi不会在您的应用程序中其他位置重复使用Zenddi,而不会将相同的内存开销。
> 同样,php-di在很大程度上依赖于学说库。如果您在项目中使用学说,则减少了PHP-DI的内存开销。>但是,很高兴看到SymfonyDepentIndientientient是框架堆栈的一部分,这是完全独立的,并且没有其他Symfony Projects。
由于加载文件会影响性能,Zend和PHP-DI都加载了大量文件,因此通过首先创建类的单个实例来进行相同的测试,忽略了自动加成时间,以确保在测量之前自动加载任何必需的类时间。
>
等效的php代码:
>测试代码(在GitHub上):Aura,Dice,Ornodi,Php-Di,SymfonyDependentientIndixtive,Zenddi
<span>$user = new User(new Database());</span>
如预期的那样,由于没有测量自动加载时间,记忆使用情况不变,性能稍好一些。但是,这表明php-di,即使加载42个文件也对总执行时间有忽略不计,相对性能保持不变,加载数十个文件并不是PHP-DI和Zenddi的原因相对较慢。 即使忽略了加载文件的开销,这里仍然有两个不同的球场。 Aura,Dice和Orno在性能和内存使用方面非常相似,而PHP-DI,Zend和Symfony仅在彼此之间竞争。
>未来的所有测试都会忽略自动加载的时间,以确保真正是容器的性能。>
测试3 - 深对象图
通过让容器构造这组对象10,000次来完成此测试:
>测试代码(在GitHub上):Aura,Dice,Ornodi,Php-Di,SymfonyDependentientIndixtive,Zenddi
注意:您可以通过查看测试代码,Symfony,PHP-DI和AURA所看到的,与其他容器相比,需要更大的配置代码才能执行此测试。配置时间不包括在测试中。
再次,前三名之间的区别很小,骰子比光环快20%,比Orno快70%。这三个都比Zend,PHP-DI和Symfony快得多。三个顶部容器之间的差异是如此微小,以至于您永远不会注意到像这样的人造基准之外的速度差异。
zend,php-di,在较小程度上,同伴在这里很慢。 Zend需要37秒才能在1秒内执行任务骰子管理;当然不是微不足道的差异。同样,Symfony在大名容器中带头。
内存和文件计数与我们在其他测试中看到的内容一致。
>di容器还必须存储和检索将在整个应用程序中重复使用的服务。该测试可反复从容器中获取一个实例。
纯PHP等效:
<span>$user = new User(new Database());</span>
>测试代码(在GitHub上):Aura,Dice,Ornodi,Php-Di,SymfonyDependentientIndixtive,Zenddi
这是根据先前的结果出乎意料的。除Zend和Symfony以外的所有容器大致相等,仅为0.01,将前4个结果分开。 Symfony不远,但是Zend的速度比其他人要慢十倍。
>
>内存使用量和文件结果的数量正在变得可预测,并且在执行时间内看到的容器之间的划分相同。
>>最终测试是查看可以构建对象并注入服务的速度。这采用格式:
<span>$user = $container->get('User');</span>
>测试代码(在GitHub上):Aura,Dice,Ornodi,Php-Di,SymfonyDependentientIndixtive,Zenddi
> 令人惊讶的是,PHP-DI是该任务最慢的,Zend首次将其位置领先于PHP-DI和Symfony。
仅在性能上,骰子,光环和奥尔诺都是强大的竞争对手,骰子在最终测试中的总体上最快,光环最快。两个不同的组之间的区别很明显,但是比较每个容器的特征有趣的。功能和性能的数量不会像您期望的那样完全相关。 PHP-DI和DICE都包含独特的功能,但PHP-DI为此而受到了沉重的表现。 Aura虽然很快,但需要大量的手动配置,并且正如您所期望的那样,具有很小的功能,而骰子和Orno的性能非常相似,但需要更少的配置代码。 在所有测试中,Symfony在所有测试中都非常重要,尽管与AURA一样,将其配置为一项更加困难的任务,因为既不支持类型的参数。如果您正在寻找一个众所周知的项目中的容器,那么Symfony必须成为首选的容器,如果性能很重要。
也就是说,如果您之后纯粹的表现是什么,那么Dice和Aura就是Orno非常接近的明显赢家。但是,值得一提的是配置语法和每个功能,以查看您希望与之合作,因为骰子,Aura和Orno之间的性能差异对于任何真实的应用都可以忽略不计。 所有测试的代码均可在GitHub上获得。请注意:GitHub存储库包含所测试的库的副本,而不是使用作曲家将它们包括在项目中,这是为了确保您可以使用我测试的精确版本运行代码并获得相同的结果。 >> PHP依赖注入集装箱性能基准
的经常询问问题(常见问题解答)PHP依赖注入容器性能基准的重要性是什么?这些基准提供了对各种容器的比较分析,帮助开发人员根据其特定需求做出明智的决定。他们在记忆使用和时间消耗方面提供了对每个容器的性能的见解,这是优化PHP应用程序性能的关键因素。 >依赖性注入容器在PHP中如何工作? >> PHP中的依赖注入类型是什么?构造函数是通过类构造函数提供依赖项的地方。 Setter注入涉及通过方法提供依赖项。接口注入要求依赖类要实现一个接口,该接口将注入依赖项。
>
>依赖注射如何有助于PHP中的更好的测试?班级的依赖项。这允许在测试过程中嘲笑或固执,使您可以孤立地测试类。这也使编写单元测试变得更容易,因为您可以注入可提供可预测响应的模拟依赖项,从而使您的测试更加可靠且更易于编写。依赖性注入与PHP中的固体原理有何关系?
以上是PHP依赖注入容器性能基准测试的详细内容。更多信息请关注PHP中文网其他相关文章!