钥匙要点
- 依赖性注入容器(DIC)是在较大的PHP应用程序和框架中维护代码库的关键工具,但会影响性能。 PHP的一些众所周知的DIC包括PHP-DI,SymfonyDepentientiention,Zenddi,Ornodi,Dice和aura.di. > DIC的性能是根据执行时间,内存使用和所包括的文件数来衡量的。最后一个指标尤其重要,因为它会极大地影响应用程序的整体重量。 在经过测试的容器,骰子,Aura和Orno中,
- 最快,骰子是最快的。尽管具有独特的功能,但PHP-DI的性能很大。 Symfony虽然更难配置,但在中间立场上执行,对于那些寻求著名项目容器的人来说,这将是首选的选择。 尽管性能差异,但DIC的选择也应考虑配置语法和功能。对于任何实际应用,骰子,Aura和Orno之间的性能差异都可以忽略不计,因此,开发人员应根据他们希望使用的。
- 大多数框架和较大的PHP应用程序都采用依赖式注入容器,其目标是更可维护的代码库。但是,这可能会影响性能。由于加载时间很重要,因此快速保持站点一如既往的重要性。今天,我将基准基准几个PHP依赖注入容器,以了解其相对性能。 对于那些不熟悉概念的人,依赖性注入容器是一种自动构建对象树的软件。例如,考虑一个需要数据库实例的用户对象。
>每次称呼,都会使用“注入”数据库对象创建一个用户对象。
-
PHP-DI,一个流行的DI容器
- symfonyDipendentibextifement,Symfony框架提供的依赖性注入容器
- > zenddi Zend Framework提供的依赖式注入容器
- ornodi,一个鲜为人知的容器,具有有限的功能,但刻意
- 的性能开发 骰子,另一个鲜为人知的容器,重点是轻量级。全面披露,我是这个容器的作者,但在此分析中我将完全客观。
- > pimple上的单词:虽然丘疹被广告为依赖性注入容器,但是从容器中检索对象总是返回相同的实例,这使得pimple成为服务定位器,而不是依赖性注入容器,因此,无法被测试。
>尽管所有容器都支持不同的功能,但该基准测试将涵盖依赖项注入容器所需的基本功能。也就是说,创建对象并注入需要的依赖性。
将测量依赖注入的哪些方面?执行时间
>内存使用
- >包括的文件数量。尽管这对性能几乎没有影响,但可以很好地指示图书馆的轻量级和便携式。如果您由于选择DI而必须用项目运送数百个文件,则可能会严重影响您自己应用程序的整体重量。
- 测试环境
- 所有测试均在运行Arch Linux(3.15内核),PHP 5.5.13和每个容器的最新版本的同一台机器上运行,截至03/07/2014。
测试1 - 创建一个对象的实例
>此测试使用每个容器创建一个简单的对象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在大名容器中带头。
内存和文件计数与我们在其他测试中看到的内容一致。
>测试4 - 从容器中获取服务
di容器还必须存储和检索将在整个应用程序中重复使用的服务。该测试可反复从容器中获取一个实例。
纯PHP等效:
<span>$user = new User(new Database());</span>
>测试代码(在GitHub上):Aura,Dice,Ornodi,Php-Di,SymfonyDependentientIndixtive,Zenddi
这是根据先前的结果出乎意料的。除Zend和Symfony以外的所有容器大致相等,仅为0.01,将前4个结果分开。 Symfony不远,但是Zend的速度比其他人要慢十倍。
>
>内存使用量和文件结果的数量正在变得可预测,并且在执行时间内看到的容器之间的划分相同。
>测试5 - 注入服务
>>最终测试是查看可以构建对象并注入服务的速度。这采用格式:
<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中文网其他相关文章!

PHP仍然流行的原因是其易用性、灵活性和强大的生态系统。1)易用性和简单语法使其成为初学者的首选。2)与web开发紧密结合,处理HTTP请求和数据库交互出色。3)庞大的生态系统提供了丰富的工具和库。4)活跃的社区和开源性质使其适应新需求和技术趋势。

PHP和Python都是高层次的编程语言,广泛应用于Web开发、数据处理和自动化任务。1.PHP常用于构建动态网站和内容管理系统,而Python常用于构建Web框架和数据科学。2.PHP使用echo输出内容,Python使用print。3.两者都支持面向对象编程,但语法和关键字不同。4.PHP支持弱类型转换,Python则更严格。5.PHP性能优化包括使用OPcache和异步编程,Python则使用cProfile和异步编程。

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP在现代化进程中仍然重要,因为它支持大量网站和应用,并通过框架适应开发需求。1.PHP7提升了性能并引入了新功能。2.现代框架如Laravel、Symfony和CodeIgniter简化开发,提高代码质量。3.性能优化和最佳实践进一步提升应用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

Dreamweaver Mac版
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

WebStorm Mac版
好用的JavaScript开发工具