Dependency-Injection-Container im Performance-Vergleich
Kommentare

Zahlreiche Frameworks setzen auf Dependency-Injection-Container, mit dem Ziel, die Codebasis besser warten zu können oder Klassenabhängigkeiten zu kontrollieren. Dabei verfolgt jedes Framework natürlich sein eigenes Konzept – was unweigerlich zur Frage führt, wie sich die DI-Container der verschiedenen Frameworks im Performance-Vergleich schlagen. Eine aktuelle Analyse von Tom Butler vergleicht sechs Dependency-Injection-Container und gibt Auskunft.

Dependency-Injection-Container im Performance-Vergleich

DI-Container von insgesamt sechs Frameworks wurden für den Performance-Vergleich herangezogen. Es stellen sich SymfonyDependencyInjection, ZendDi, PHP-DI, Aura.Di, OrnoDi, und Dice. Die beiden letzten Herausforderer sind relativ unbekannt, jedoch auf Leichtgewichtigkeit und Performance hin entwickelt.

Quickvote: PHP-Frameworks

In unserer aktuellen Umfrage Welches ist Euer präferiertes PHP Framework? steht Symfony ziemlich gut da. Allerdings scheint die Yii-Community deutlich aktiver zu sein … Habt ihr schon abgestimmt?

Testumgebung und Testkriterien

Getestet hat Butler die jeweils aktuellsten Versionen der Dependency-Injection-Container vom 3. Juli auf Arch Linux mit PHP 5.5.13.

Getestet hat er die DI-Container auf die Execution Time, den Speicherverbrauch und die Anzahl der inkludierten Dateien. Für letzteres gibt es eine einfache Erklärung:

Although this has very little impact on performance it’s a good indicator of how lightweight and portable a library is. If you have to ship hundreds files with your project because of your DI choice, it can heavily impact the overall weight of your own application.

Insgesamt hat Butler fünf Tests durchgeführt. Zunächst hat er die Instanz eines Objekts erstellt, danach das Autoloading ignoriert. Im dritten Test hat er einen Deep Object Graph erstellt. In den letzten beiden Tests hat er einen Service aus dem Container gezogen beziehungsweise einen Service injiziert.

Wer die Tests nachvollziehen möchte, findet den Code für die Tests inklusive die in den Tests verwendeten Dependency-Injection-Container auf GitHub.

… and the winner is

Betrachtet man nur die Performance alleine, so ist es ein knappes Rennen zwischen Orno, Aura und Dice. Gerade Dice schlägt sich in allen Tests hervorragend und gibt, rein performancetechnisch betrachtet, eine sehr gute Figur ab.

Symfony liegt durchweg im Mittelfeld, punktet allerdings mit der Verbreitung des Frameworks. Der Dependency-Injection-Container des Zend Frameworks liegt in allen Tests ganz hinten.

Reaktionen der Community

Gleich von zwei Seiten wird Butler jedoch auf kleinere Ungenauigkeiten hingewiesen.

So verweist Matthew Weier O’Phinney darauf, dass Zend selbst von der Verwendung von ZendDi abrät. Statt dessen würde er sich wünschen, dass der ZendServiceManager aufgenommen werden würde, um Lesern zu ermöglichen, sich ein genaueres Bild bei diesem Performance-Vergleich machen zu können. Weitere Informationen zum Service-Manager des Zend Framework 2 bietet übrigens Ralf Eggerts Artikel Zend Framework 2: Ein Überblick über den Service-Manager.

Ein weiterer Hinweis kommt von Lukas Smith, der auf eine spezielle Option in Symfony 2 hinweist:

Symfony2 gives the option to compile and cache the container which is what Symfony2 fullstack does by default to provide some high level features and improve performance:

Wer sich selbst ein Bild davon machen möchte oder alle Tests en Detail sowie weitere Hintergründe sucht, findet sie im Post PHP Dependency Injection Container Performance Benchmarks.

Aufmacherbild: Test tubes, isolated on white background von Shutterstock / Urheberrecht: AlenD

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -