国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
鑰匙要點
測試1 - 創(chuàng)建一個對象的實例
這也可能觸發(fā)了容器所做的任何內(nèi)部緩存,但是對每個容器都采用了相同的處理,以使其保持公平
測試4 - 從容器中獲取服務(wù)
測試5 - 注入服務(wù)
結(jié)論
> PHP中的依賴注入類型是什么?構(gòu)造函數(shù)是通過類構(gòu)造函數(shù)提供依賴項的地方。 Setter注入涉及通過方法提供依賴項。接口注入要求依賴類要實現(xiàn)一個接口,該接口將注入依賴項。
>
首頁 后端開發(fā) php教程 PHP依賴注入容器性能基準(zhǔn)測試

PHP依賴注入容器性能基準(zhǔn)測試

Feb 20, 2025 pm 12:23 PM

PHP依賴注入容器性能基準(zhǔn)測試

鑰匙要點

  • 依賴性注入容器(DIC)是在較大的PHP應(yīng)用程序和框架中維護(hù)代碼庫的關(guān)鍵工具,但會影響性能。 PHP的一些眾所周知的DIC包括PHP-DI,SymfonyDepentientiention,Zenddi,Ornodi,Dice和aura.di.
  • > DIC的性能是根據(jù)執(zhí)行時間,內(nèi)存使用和所包括的文件數(shù)來衡量的。最后一個指標(biāo)尤其重要,因為它會極大地影響應(yīng)用程序的整體重量。 在經(jīng)過測試的容器,骰子,Aura和Orno中,
  • 最快,骰子是最快的。盡管具有獨特的功能,但PHP-DI的性能很大。 Symfony雖然更難配置,但在中間立場上執(zhí)行,對于那些尋求著名項目容器的人來說,這將是首選的選擇。
  • 盡管性能差異,但DIC的選擇也應(yīng)考慮配置語法和功能。對于任何實際應(yīng)用,骰子,Aura和Orno之間的性能差異都可以忽略不計,因此,開發(fā)人員應(yīng)根據(jù)他們希望使用的。
  • 大多數(shù)框架和較大的PHP應(yīng)用程序都采用依賴式注入容器,其目標(biāo)是更可維護(hù)的代碼庫。但是,這可能會影響性能。由于加載時間很重要,因此快速保持站點一如既往的重要性。今天,我將基準(zhǔn)基準(zhǔn)幾個PHP依賴注入容器,以了解其相對性能。 對于那些不熟悉概念的人,依賴性注入容器是一種自動構(gòu)建對象樹的軟件。例如,考慮一個需要數(shù)據(jù)庫實例的用戶對象。
依賴項注入容器可用于自動構(gòu)造對象樹,而無需手動提供參數(shù):

>每次稱呼,都會使用“注入”數(shù)據(jù)庫對象創(chuàng)建一個用戶對象。>

有幾個可用于PHP的知名度(并且尚不清楚)的容器:
    PHP-DI,一個流行的DI容器
  • symfonyDipendentibextifement,Symfony框架提供的依賴性注入容器
  • >
  • zenddi Zend Framework提供的依賴式注入容器
  • orn??odi,一個鮮為人知的容器,具有有限的功能,但刻意
  • 的性能開發(fā)
  • 骰子,另一個鮮為人知的容器,重點是輕量級。全面披露,我是這個容器的作者,但在此分析中我將完全客觀。 aura.di,一個相當(dāng)受歡迎的容器,具有最少的功能
  • >
  • pimple上的單詞:雖然丘疹被廣告為依賴性注入容器,但是從容器中檢索對象總是返回相同的實例,這使得pimple成為服務(wù)定位器,而不是依賴性注入容器,因此,無法被測試。

>盡管所有容器都支持不同的功能,但該基準(zhǔn)測試將涵蓋依賴項注入容器所需的基本功能。也就是說,創(chuàng)建對象并注入需要的依賴性。

將測量依賴注入的哪些方面?

執(zhí)行時間

>內(nèi)存使用
  1. >包括的文件數(shù)量。盡管這對性能幾乎沒有影響,但可以很好地指示圖書館的輕量級和便攜式。如果您由于選擇DI而必須用項目運送數(shù)百個文件,則可能會嚴(yán)重影響您自己應(yīng)用程序的整體重量。
  2. 測試環(huán)境
  3. 所有測試均在運行Arch Linux(3.15內(nèi)核),PHP 5.5.13和每個容器的最新版本的同一臺機(jī)器上運行,截至03/07/2014。
顯示的所有執(zhí)行時間號平均丟棄了比最快慢20%以上的所有執(zhí)行時間。

測試1 - 創(chuàng)建一個對象的實例

>

此測試使用每個容器創(chuàng)建一個簡單的對象10,000倍

沒有依賴注入容器,這將寫為:> >測試代碼(在GitHub上):Aura,Dice,Ornodi,Php-Di,SymfonyDependentientIndixtive,Zenddi

如您所見,這里有兩個清晰的營地。 Aura,Dice和Orno的速度大約比PHP-DI,Symfony和Zenddi快十倍。

<span>$user = new User(new Database());</span>
類似于執(zhí)行時間,有兩個截然不同的群體,在中間的某個地方坐著。

>這是每個容器的輕量級,并且在解釋內(nèi)存使用差異方面有些輕巧。應(yīng)該注意的是,Zenddi使用的許多文件都是常見的框架文件,因此,如果您使用Zend Framework,那么使用Zenddi不會在您的應(yīng)用程序中其他位置重復(fù)使用Zenddi,而不會將相同的內(nèi)存開銷。

> 同樣,php-di在很大程度上依賴于學(xué)說庫。如果您在項目中使用學(xué)說,則減少了PHP-DI的內(nèi)存開銷。

>但是,很高興看到SymfonyDepentIndientientient是框架堆棧的一部分,這是完全獨立的,并且沒有其他Symfony Projects。 aura,骰子和orno沒有任何外部依賴關(guān)系,這有助于保持其文件計算。

測試2 - 忽略自動加載

由于加載文件會影響性能,Zend和PHP-DI都加載了大量文件,因此通過首先創(chuàng)建類的單個實例來進(jìn)行相同的測試,忽略了自動加成時間,以確保在測量之前自動加載任何必需的類時間。

>

這也可能觸發(fā)了容器所做的任何內(nèi)部緩存,但是對每個容器都采用了相同的處理,以使其保持公平

等效的php代碼:

>測試代碼(在GitHub上):Aura,Dice,Ornodi,Php-Di,SymfonyDependentientIndixtive,Zenddi

<span>$user = new User(new Database());</span>

PHP依賴注入容器性能基準(zhǔn)測試

如預(yù)期的那樣,由于沒有測量自動加載時間,記憶使用情況不變,性能稍好一些。但是,這表明php-di,即使加載42個文件也對總執(zhí)行時間有忽略不計,相對性能保持不變,加載數(shù)十個文件并不是PHP-DI和Zenddi的原因相對較慢。 即使忽略了加載文件的開銷,這里仍然有兩個不同的球場。 Aura,Dice和Orno在性能和內(nèi)存使用方面非常相似,而PHP-DI,Zend和Symfony僅在彼此之間競爭。

>未來的所有測試都會忽略自動加載的時間,以確保真正是容器的性能。

> PHP依賴注入容器性能基準(zhǔn)測試測試3 - 深對象圖

通過讓容器構(gòu)造這組對象10,000次來完成此測試:>

>測試代碼(在GitHub上):Aura,Dice,Ornodi,Php-Di,SymfonyDependentientIndixtive,Zenddi

注意:您可以通過查看測試代碼,Symfony,PHP-DI和AURA所看到的,與其他容器相比,需要更大的配置代碼才能執(zhí)行此測試。配置時間不包括在測試中。

PHP依賴注入容器性能基準(zhǔn)測試

再次,前三名之間的區(qū)別很小,骰子比光環(huán)快20%,比Orno快70%。這三個都比Zend,PHP-DI和Symfony快得多。三個頂部容器之間的差異是如此微小,以至于您永遠(yuǎn)不會注意到像這樣的人造基準(zhǔn)之外的速度差異。

zend,php-di,在較小程度上,同伴在這里很慢。 Zend需要37秒才能在1秒內(nèi)執(zhí)行任務(wù)骰子管理;當(dāng)然不是微不足道的差異。同樣,Symfony在大名容器中帶頭。

PHP依賴注入容器性能基準(zhǔn)測試

PHP依賴注入容器性能基準(zhǔn)測試

內(nèi)存和文件計數(shù)與我們在其他測試中看到的內(nèi)容一致。

>

測試4 - 從容器中獲取服務(wù)

di容器還必須存儲和檢索將在整個應(yīng)用程序中重復(fù)使用的服務(wù)。該測試可反復(fù)從容器中獲取一個實例。

純PHP等效:

<span>$user = new User(new Database());</span>

>測試代碼(在GitHub上):Aura,Dice,Ornodi,Php-Di,SymfonyDependentientIndixtive,Zenddi

PHP依賴注入容器性能基準(zhǔn)測試

這是根據(jù)先前的結(jié)果出乎意料的。除Zend和Symfony以外的所有容器大致相等,僅為0.01,將前4個結(jié)果分開。 Symfony不遠(yuǎn),但是Zend的速度比其他人要慢十倍。

>

PHP依賴注入容器性能基準(zhǔn)測試

PHP依賴注入容器性能基準(zhǔn)測試

>內(nèi)存使用量和文件結(jié)果的數(shù)量正在變得可預(yù)測,并且在執(zhí)行時間內(nèi)看到的容器之間的劃分相同。

>

測試5 - 注入服務(wù)

>

>最終測試是查看可以構(gòu)建對象并注入服務(wù)的速度。這采用格式:

<span>$user = $container->get('User');</span>

>測試代碼(在GitHub上):Aura,Dice,Ornodi,Php-Di,SymfonyDependentientIndixtive,Zenddi

PHP依賴注入容器性能基準(zhǔn)測試

有趣的是,Aura在此測試中略有領(lǐng)先。但是,這并不是類似的測試,因為Symfony和Aura需要幾行明確的配置,而其他容器會自動解決依賴關(guān)系。配置容器的時間不是基準(zhǔn)的一部分。

> 令人驚訝的是,PHP-DI是該任務(wù)最慢的,Zend首次將其位置領(lǐng)先于PHP-DI和Symfony。

PHP依賴注入容器性能基準(zhǔn)測試

結(jié)論

僅在性能上,骰子,光環(huán)和奧爾諾都是強(qiáng)大的競爭對手,骰子在最終測試中的總體上最快,光環(huán)最快。兩個不同的組之間的區(qū)別很明顯,但是比較每個容器的特征有趣的。功能和性能的數(shù)量不會像您期望的那樣完全相關(guān)。 PHP-DI和DICE都包含獨特的功能,但PHP-DI為此而受到了沉重的表現(xiàn)。 Aura雖然很快,但需要大量的手動配置,并且正如您所期望的那樣,具有很小的功能,而骰子和Orno的性能非常相似,但需要更少的配置代碼。 在所有測試中,Symfony在所有測試中都非常重要,盡管與AURA一樣,將其配置為一項更加困難的任務(wù),因為既不支持類型的參數(shù)。如果您正在尋找一個眾所周知的項目中的容器,那么Symfony必須成為首選的容器,如果性能很重要。

也就是說,如果您之后純粹的表現(xiàn)是什么,那么Dice和Aura就是Orno非常接近的明顯贏家。但是,值得一提的是配置語法和每個功能,以查看您希望與之合作,因為骰子,Aura和Orno之間的性能差異對于任何真實的應(yīng)用都可以忽略不計。

所有測試的代碼均可在GitHub上獲得。請注意:GitHub存儲庫包含所測試的庫的副本,而不是使用作曲家將它們包括在項目中,這是為了確保您可以使用我測試的精確版本運行代碼并獲得相同的結(jié)果。 >

> PHP依賴注入集裝箱性能基準(zhǔn)

的經(jīng)常詢問問題(常見問題解答)

PHP依賴注入容器性能基準(zhǔn)的重要性是什么?這些基準(zhǔn)提供了對各種容器的比較分析,幫助開發(fā)人員根據(jù)其特定需求做出明智的決定。他們在記憶使用和時間消耗方面提供了對每個容器的性能的見解,這是優(yōu)化PHP應(yīng)用程序性能的關(guān)鍵因素。>> PHP依賴性注入如何改善代碼質(zhì)量? > PHP中的依賴注入(DI)通過促進(jìn)較大的耦合,增強(qiáng)可測試性和增加代碼可重復(fù)性來提高代碼質(zhì)量。通過注入依賴項,組件變得更加獨立,使代碼更易于修改和測試。這也鼓勵單一的責(zé)任原則,因為每個班級只能做應(yīng)該做的事情,從而導(dǎo)致更清潔,更可維護(hù)的代碼。

> PHP中的依賴注入類型是什么?構(gòu)造函數(shù)是通過類構(gòu)造函數(shù)提供依賴項的地方。 Setter注入涉及通過方法提供依賴項。接口注入要求依賴類要實現(xiàn)一個接口,該接口將注入依賴項。

>依賴性注入容器在PHP中如何工作?

>

容器,管理應(yīng)用程序中服務(wù)或?qū)ο蟮膶嵗团渲谩K洚?dāng)負(fù)責(zé)創(chuàng)建和返回依賴實例的工廠。它還管理共享實例,確保每次請求共享服務(wù)時都會返回一個實例。

選擇依賴項注入容器時,我應(yīng)該考慮哪些因素?容器,考慮諸如易用性,績效,社區(qū)支持和與您項目兼容的因素。性能尤其重要,這是PHP依賴注入集裝箱性能基準(zhǔn)測試中用場的地方。它們提供了對各種容器的性能的比較分析,可幫助您做出明智的決定。

>

>依賴注射如何有助于PHP中的更好的測試?班級的依賴項。這允許在測試過程中嘲笑或固執(zhí),使您可以孤立地測試類。這也使編寫單元測試變得更容易,因為您可以注入可提供可預(yù)測響應(yīng)的模擬依賴項,從而使您的測試更加可靠且更易于編寫。

>

>我可以在任何PHP項目中使用依賴項注入嗎?是的,無論其大小或復(fù)雜性如何,都可以在任何PHP項目中使用依賴注入。這是一種設(shè)計模式,可促進(jìn)代碼可重復(fù)性,模塊化性和可檢驗性,使其成為任何PHP開發(fā)人員的寶貴工具。

>依賴性注入對應(yīng)用程序性能的影響是什么?由于額外的抽象層,可以引入輕微的開銷,對應(yīng)用程序性能的影響通常可以忽略不計。改善代碼質(zhì)量,可檢驗性和可維護(hù)性的好處通常超過任何較小的性能成本。

依賴性注入與PHP中的固體原理有何關(guān)系?依賴性注入與固體原理密切相關(guān),尤其是依賴性反轉(zhuǎn)原理(DIP)。 DIP指出,高級模塊不應(yīng)取決于低級模塊,但兩者都應(yīng)取決于抽象。依賴注入可以通過使您能夠?qū)⒁蕾図椬⑷虢涌诨虺橄箢悾皇蔷唧w類。通常不建議使用單個PHP項目中使用多個依賴性注入容器。使用多個容器可能會導(dǎo)致更難管理和理解的代碼。通常最好選擇一個最適合您項目需求并堅持下去的容器。>

以上是PHP依賴注入容器性能基準(zhǔn)測試的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

對基于PHP的API進(jìn)行版本控制的最佳實踐是什么? 對基于PHP的API進(jìn)行版本控制的最佳實踐是什么? Jun 14, 2025 am 12:27 AM

基于toversionaphp,useUrl deuseUrl specteringforclarityAndEsofRouting,單獨的codetoavoidConflicts,dremecateOldVersionswithClearCommunication,andConsiderCustomHeadeSerlySerallyWhennEnncelsy.startbyplacingtheversionIntheUrl(E.G.,epi/api/v

如何在PHP中實施身份驗證和授權(quán)? 如何在PHP中實施身份驗證和授權(quán)? Jun 20, 2025 am 01:03 AM

tosecurelyhandleauthenticationandationallizationInphp,lofterTheSesteps:1.AlwaysHashPasswordSwithPassword_hash()andverifyusingspasspassword_verify(),usepreparedStatatementStopreventsqlineptions,andStoreSeruserDatain usseruserDatain $ _sessiveferterlogin.2.implementrole-2.imaccessccsccccccccccccccccccccccccc.

PHP中有哪些弱參考(弱圖),何時有用? PHP中有哪些弱參考(弱圖),何時有用? Jun 14, 2025 am 12:25 AM

PHPdoesnothaveabuilt-inWeakMapbutoffersWeakReferenceforsimilarfunctionality.1.WeakReferenceallowsholdingreferenceswithoutpreventinggarbagecollection.2.Itisusefulforcaching,eventlisteners,andmetadatawithoutaffectingobjectlifecycles.3.YoucansimulateaWe

PHP中的程序和面向?qū)ο蟮木幊谭独g有什么區(qū)別? PHP中的程序和面向?qū)ο蟮木幊谭独g有什么區(qū)別? Jun 14, 2025 am 12:25 AM

procemal and object-tiriendedprogromming(oop)inphpdiffersimplessintustructure,可重復(fù)使用性和datahandling.1.procedural-Progrogursmingusesfunctimesfunctionsormanized sequalized sequalized sequiential,poiperforsmallscripts.2.OpporganizesCodeOrganizescodeOdeIntsocloceSandObjects,ModelingReal-Worlden-Worlden

如何在PHP中安全地處理文件上傳? 如何在PHP中安全地處理文件上傳? Jun 19, 2025 am 01:05 AM

要安全處理PHP中的文件上傳,核心在于驗證文件類型、重命名文件并限制權(quán)限。1.使用finfo_file()檢查真實MIME類型,僅允許特定類型如image/jpeg;2.用uniqid()生成隨機(jī)文件名,存儲至非Web根目錄;3.通過php.ini和HTML表單限制文件大小,設(shè)置目錄權(quán)限為0755;4.使用ClamAV掃描惡意軟件,增強(qiáng)安全性。這些步驟有效防止安全漏洞,確保文件上傳過程安全可靠。

PHP中==(松散比較)和===(嚴(yán)格的比較)之間有什么區(qū)別? PHP中==(松散比較)和===(嚴(yán)格的比較)之間有什么區(qū)別? Jun 19, 2025 am 01:07 AM

在PHP中,==與===的主要區(qū)別在于類型檢查的嚴(yán)格程度。==在比較前會進(jìn)行類型轉(zhuǎn)換,例如5=="5"返回true,而===要求值和類型都相同才會返回true,例如5==="5"返回false。使用場景上,===更安全應(yīng)優(yōu)先使用,==僅在需要類型轉(zhuǎn)換時使用。

如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進(jìn)行交互? 如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進(jìn)行交互? Jun 19, 2025 am 01:07 AM

是的,PHP可以通過特定擴(kuò)展或庫與MongoDB和Redis等NoSQL數(shù)據(jù)庫交互。首先,使用MongoDBPHP驅(qū)動(通過PECL或Composer安裝)創(chuàng)建客戶端實例并操作數(shù)據(jù)庫及集合,支持插入、查詢、聚合等操作;其次,使用Predis庫或phpredis擴(kuò)展連接Redis,執(zhí)行鍵值設(shè)置與獲取,推薦phpredis用于高性能場景,Predis則便于快速部署;兩者均適用于生產(chǎn)環(huán)境且文檔完善。

如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? 如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? Jun 19, 2025 pm 05:13 PM

PHP中使用基本數(shù)學(xué)運算的方法如下:1.加法用 號,支持整數(shù)和浮點數(shù),也可用于變量,字符串?dāng)?shù)字會自動轉(zhuǎn)換但不推薦依賴;2.減法用-號,變量同理,類型轉(zhuǎn)換同樣適用;3.乘法用*號,適用于數(shù)字及類似字符串;4.除法用/號,需避免除以零,并注意結(jié)果可能是浮點數(shù);5.取模用%號,可用于判斷奇偶數(shù),處理負(fù)數(shù)時余數(shù)符號與被除數(shù)一致。正確使用這些運算符的關(guān)鍵在于確保數(shù)據(jù)類型清晰并處理好邊界情況。

See all articles