Shopware und XDEBUG Performance

Seit geraumer Zeit musste ich wieder feststellen das mein Kompilierungsprozess extrem lange dauert. In Folge dessen war ich schon am überlegen unseren Testserver in der Firma für die Entwicklung zu nehmen. Wie sich aber später herausstellte war einzige XDEBUG Schuld an den ELEEEENDS langen Ladezeiten.

XDEBUG

XDEBUG ist eine PHP extension. Sie hilft beim finden von Fehlern tief im Code, bei dem ein schneller var_dump() einfach nicht hilft. Beispielsweise beim berechnen von MwSt. Sätzen oder anderen komplexeren Berechnungen bei denen viele Services/Bundles miteinander kommunizieren.

XDEBUG aktiv

Im Testfall habe ich einen Shop mit 10 Subshops kompiliert und vor den CLI Befehl ein time gestellt um zu messen wie lang das ganze dauert.

CPU: Intel I7 4790

Generating new theme cache for shop "MASTER" ...
Generating new theme cache for shop "SV" ...
Generating new theme cache for shop "YC" ...
Generating new theme cache for shop "MLD" ...
Generating new theme cache for shop "RS" ...
Generating new theme cache for shop "FI" ...
Generating new theme cache for shop "HP" ...
Generating new theme cache for shop "HJ" ...
Generating new theme cache for shop "EQ" ...
Generating new theme cache for shop "HF" ...
Generating new theme cache for shop "VC" ...
Clearing HTTP cache ...
62.56 seconds

CPU: Intel I5-7500U

Generating new theme cache for shop "MASTER" ...
Generating new theme cache for shop "SV" ...
Generating new theme cache for shop "YC" ...
Generating new theme cache for shop "MLD" ...
Generating new theme cache for shop "RS" ...
Generating new theme cache for shop "FI" ...
Generating new theme cache for shop "HP" ...
Generating new theme cache for shop "HJ" ...
Generating new theme cache for shop "EQ" ...
Generating new theme cache for shop "HF" ...
Generating new theme cache for shop "VC" ...
Clearing HTTP cache ...
182.33 seconds

XDEBUG inaktiv

CPU: Intel I7 4790

Generating new theme cache for shop "MASTER" ...
Generating new theme cache for shop "SV" ...
Generating new theme cache for shop "YC" ...
Generating new theme cache for shop "MLD" ...
Generating new theme cache for shop "RS" ...
Generating new theme cache for shop "FI" ...
Generating new theme cache for shop "HP" ...
Generating new theme cache for shop "HJ" ...
Generating new theme cache for shop "EQ" ...
Generating new theme cache for shop "HF" ...
Generating new theme cache for shop "VC" ...
Clearing HTTP cache ...
57.48 seconds

CPU: Intel I5-7500U

micha@sc-micha /v/w/shopware> time php7.0 bin/console sw:theme:cache:generate
Generating new theme cache for shop "MASTER" ...
Generating new theme cache for shop "SV" ...
Generating new theme cache for shop "YC" ...
Generating new theme cache for shop "MLD" ...
Generating new theme cache for shop "RS" ...
Generating new theme cache for shop "FI" ...
Generating new theme cache for shop "HP" ...
Generating new theme cache for shop "HJ" ...
Generating new theme cache for shop "EQ" ...
Generating new theme cache for shop "HF" ...
Generating new theme cache for shop "VC" ...
Clearing HTTP cache ...
67.06 seconds

Warum der 4790 so viel schneller ist kann ich mir nicht erklären, laut HTOP nutzt der Process ausschließlich einen Core und der Single Core Speed der beiden ist ähnlich ( 10% besser beim 4790). 

Lösungswege

Container

Ihr könnt mit Docker zwei PHP Container einrichten. Einer läuft mit XDEBUG der andere ohne. NGINX kann mit einem mapping dann über das Cookie entscheiden welchen Container er verwenden soll (hier ein Blogbeitrag dazu)

Abschalten

Wenn Ihr nur an Tempaltes herumbastelt oder ein Plugin baut braucht Ihr erstmal zu 95% kein XDEBUG. In dem Fall geht Ihr einfach in eure /etc/php/7.0/mods-available/xdebug.ini oder in die php.ini und kommentiert alles bezüglich xdebug aus. Oder noch einfacher – sudo phpdismod xdebug  Glaubt mir, die Zeitersparnis im Vergleich zu langsam kompilieren ist das Wert.

Andere Lösung?

Teilt diese doch gerne hier in den Kommentaren. Ich bin gespannt 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.