鑰匙要點
- 依賴性注入容器(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
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

Dreamweaver Mac版
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中