>每次稱呼,都會使用“注入”數據庫對象創建一個用戶對象。
>儘管所有容器都支持不同的功能,但該基準測試將涵蓋依賴項注入容器所需的基本功能。也就是說,創建對象並註入需要的依賴性。
將測量依賴注入的哪些方面?執行時間
此測試使用每個容器創建一個簡單的對象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中文網其他相關文章!