Shopware Performance Tipps

|
Mann bindet sich Laufschuhe zu

Ich möchte euch heute erklären, welche Möglichkeiten ihr habt, damit euer Shopware-Shop möglichst performant ist. Welche Schritte und Voraussetzungen nötig sind, erfahrt ihr heute im Blog.

Ganz grundsätzlich solltet ihr eine aktuelle PHP-Version verwenden. Shopware 4.3 benötigt mindestens PHP 5.4, je nach installierten Plugins kann und sollte eine aktuellere PHP Version verwendet werden. PHP 5.5 oder PHP 5.6 (je nach verwendeten Plugins und deren Kompatibilität) wird empfohlen. Die Verwendung eines Bytecode-Cache (ZendOpcache + APCu) bringt einen weiteren Performance-Schub. Der ZendOpcache sorgt dafür, dass nicht bei jedem Request alle beteiligten PHP-Dateien neu kompiliert und geladen werden müssen. APCu bietet einen User-Cache an.

Screenshot Checks
Aufführung von Performance checks und Anzeige des Ergebnisses

Shopware performant in einem Mittwald Account über den Softwaremanager zu installieren ist einfach. Für die aktuelle Shopware-Version 5.0.1 wird euch direkt eine optimale PHP-Version vorgeschlagen, nämlich PHP 5.6.5 GRC in Kombination mit MySQL 5.6. Alternativ könnt ihr natürlich auch eine andere PHP-Version (ab PHP 5.4) verwenden. Die GRC-Varianten der PHP-Versionen sind auf Systeme wie Shopware optimiert und haben APCu und ZendOpcache direkt mit dabei. Mit dieser Konfiguration belohnen uns die Shopware „Performance checks“ mit drei grünen Häkchen. :)

HTTP-Cache aktivieren

Shopware bringt in der Standardkonfiguration ab Shopware 4.1 bereits einen Frontend-Cache mit. Dieser cacht die Ausgabe und sorgt für eine blitzschnelle Auslieferung des Shops aus dem Cache.

Der HTTP-Cache kann im Backend unter „Einstellungen“ → „Caches / Performance“ aktiviert und konfiguriert werden.

Shopware 4:

Unter dem Reiter „Einstellungen“ findet ihr den Reiter „HTTP-Cache“. Hier reicht ein Häkchen bei „HttpCache aktivieren“ aus, um den HTTP-Cache zu aktivieren.

Wenn ihr Shopware über unseren Softwaremanager installieren, haben wir das Plugin bereits standardmäßig für euch aktiviert.

Shopware 5:

In Shopware 5 findet sich die Einstellung im selben Dialog, nur die Bezeichnung hat sich geändert. Hier aktiviert ihr einfach den Radiobutton „Shop im Produktivmodus verwenden“.

HTTP-Cache konfigurieren

Außerdem findet sich auf der Einstellungsseite die Checkbox „Automatische-Cache-Invalidierung“. Wenn diese aktiviert ist, werden die gecachten Artikeldaten beispielsweise invalidiert, wenn Änderungen am Artikel vorgenommen werden.

Screenshot HTTP-Cache konfigurieren
Möglichkeiten der HTTP-Cache Konfiguration

Weiter unten auf der Seite findet ihr die beiden Bereiche „Definition der Controller (- Aktionen) Cache Zeiten“ und „Nicht gecachte Controller Tags“. Im ersten Bereich kann individuell festgelegt werden, wie viele Sekunden der Cache für bestimmte Bereiche des Webshops gültig sein soll. Beim Controller „frontend/index“, der die Startseite repräsentiert, ist der Cache im Standard beispielsweise 3600s, also eine Stunde, gültig. Nach Ablauf dieser Zeit wird der Cache bei Aufruf automatisch neu aufgebaut.

Im zweiten Bereich „Nicht gecachte Controller Tags“ kann definiert werden, welche Controller nicht gecached werden sollen, wenn bestimmte Tags in der Session auftauchen. Im Standard ist die Startseite („frontend/index“) beispielsweise mit dem Tag „price“ geflaggt. Wenn ein User also beispielsweise zu einer Kundengruppe gehört, die andere Preise als die Standard-Kundengruppe hat, soll die Startseite nicht komplett aus dem Cache geladen werden, damit die richtigen Preise angezeigt werden.

shopware performance
Performance-Einstellungen zum HTTP-Cache: Definitionen der Controller Cache Zeiten und nicht gecachte Tags

Cron einrichten und aktivieren

Shopware bringt einige vorgefertigte Cronjobs unter anderem zum aufräumen und automatischem Cache-leeren mit. Um diese zu aktivieren, müssen lediglich drei Schritte eingehalten werden:

  1. Cron-Plugin aktivieren

Im Plugin-Manager findet sich im Bereich „Shopware-Erweiterungen“ das Plugin „Cron“. Mit einem Klick ist das Plugin aktiviert und es können noch weitere Einstellungen gemacht werden, um den Aufruf der Cronjobs abzusichern. Bei Installation über den Mittwald Softwaremanager haben wir das Plugin für euch standardmäßig schon aktiviert.

  1. Shell-Script für Cronjob-Aufruf anlegen

Um den Apache-Server mit unserem Cronjob nicht zu belasten, legen wir uns ein kleines Shell-Script an, welches den Cronjob-Aufruf direkt über php anstößt. Dazu legen wir zum Beispiel unter /files die Datei shopware.sh mit folgendem Inhalt an und machen das Script ausführbar (zum Beispiel per SSH: chmod +x /files/shopware.sh):

Für Shopware 4:

#!/bin/bash

cd /html/shopware && /usr/local/bin/php_cli shopware.php /backend/cron

Ab Shopware 5:

#!/bin/bash

php_cli /html/shopware/bin/console sw:cron:run

 

  1. Cron im Kundencenter eintragen

Im Kundencenter sollte für den Shop ein Cronjob angelegt werden. Hier wählen wir den Typ „Benutzerdefinierter Aufruf“ und wählen den Interpreter „/bin/bash“. Wir tragen eine Bezeichnung für den Cronjob ein, ergänzen im Feld „Pfad / URL zum Script“ die URL „/files/shopware.sh“ und setzen das Häkchen „Cronjob aktivieren“. Weiter unten sollte noch ein Intervall für die Ausführung festgelegt werden. Dieses kann ruhig der kleinste in eurem Paket wählbare Intervall sein – Shopware regelt intern, wann welcher Cronjob in welchem Intervall aufgerufen wird.

Cronjob Manager: Cronjob einrichten
Einstellungsmöglichkeiten für neuen Cronjob: Bezeichnung, Auswahl des Interpreter, Intervall etc.

Fazit

Mit aktiviertem Frontend-Cache und der PHP GRC-Version habt ihr die Grundlage für einen performanten Shopware Shop. Der Cronjob sorgt für das automatisierte Aufräumen und Leeren des Caches.

Grundsätzlich können installierte Plugins die Performance natürlich beeinflussen. Plugins können eigene JavaScript- und Stylesheet-Dateien nachladen, die den Seitenaufbau potentiell bremsen oder das Caching sogar ganz deaktivieren für bestimmte Bereiche.

 

Ähnliche Artikel:

Deaktiviere den Admin Worker für bessere Stabilität und Performance deiner Shopware 6 Installation
Hosting

Performance-Trick: So deaktivierst du den Admin Worker in Shopware 6

Blöd, wenn dir eine Default-Einstellung die Performance zerschießt. Der Admin Worker in Shopware 6 könnte schuld sein. So deaktivierst du ihn.

Kommentare

Max Janson am
Hallo, danke für Euren tollen Artikel über das Thema Shopware. Ich beschäftige mich gerade sehr intensiv mit Shopware und der Blogbeitrag hat mir sehr geholfen. Danke dafür – keep up the good work.

Grüße Max

Seit Wochen endlich nach einer Lösung gesucht und final doch noch findig geworden. Vielen Dank für diesen tollen Beitrag. Lg Matthäus

Reinhard am

Super Anleitung, in der Shopware Anleitung wird von der Servereinstellung gar nichts beschrieben. Hier versteht mann das der Server die Shopware Cronjobs anstoßen muss.

Grüße aus Niederbayern

Ralf am

mein Shop ist einfach zu langsam habe schon alles versucht wer kann mir helfenSchaut euch das selber mal an http://www.schmuck-und-ringe.de Wer kann mir da helfen ich kenne mich damit nicht so aus

Philipp Mahlow am

Hallo Ralf,ich hab auch noch mal drüber geschaut und ich kann meinem Kollegen Jan bezüglich des Sliders nur zustimmen. Das Laden der Produkte für den „Frisch für Sie eingetroffen“-Slider hängt aus irgendeinem Grund in einer Endlosschleife bzw. es kommen keine Daten zurück. Es wäre natürlich interessant, die Ursache einzugrenzen. Kann es sein, dass die Kategorie, die da beim Slider eingestellt ist, nicht mehr existiert? Versuche da mal die Einstellungen anzupassen, ich gehe davon aus, dass das dein Problem lösen wird!Das ist der Request, der keine Daten zurückbekommt: https://www .schmuck-und-ringe.de/widgets/emotion/emotionArticleSlider/sort/newcomer?start=0&limit=10&category=15 Wenn ich den category-Parameter ändere, kommt zumindest mal etwas zurück: https:// www.schmuck-und-ringe.de/widgets/emotion/emotionArticleSlider/sort/newcomer?start=0&limit=10&category=12 Auch hier kann man sehen, dass die Kategorie 15 anscheinend nicht mehr existiert: Wo hingegen https:// www.schmuck-und-ringe.de/listing?sCategory=12 funktioniert. ;) Wenn es nicht klappt, sag Bescheid, dann schau ich gerne über deine Einstellungen. Viele Grüße Philipp

Jan Meyer am

Hallo Ralf,

deine Seite lädt enorm lange, weil über 18.000 Requests laden.
Die ganzen Requests werden durch den Slider verursacht.
Wie viele Produkte hast du dem Slider zugeordnet? Hast du da evtl. alle Produkte aus dem Shop drin? Beschränke die Auswahl mal auf max. 10 Produkte und schaue dann nach Ladezeit.

Alternativ nimm den Slider mal raus und teste die Seite dann nochmal neu.

Gruß
Jan

Sunny am

Hi,
Wie kann man den Cache warmer per cron aktivieren?
Ich dachte den cron lasse ich nachts den Cache wärmen und ändere die Cache Zeiten von 3600 auf 86400. Damit sollte das meiste für ein Tag gecached sein oder?

Danke

Sunny

Philipp Mahlow am

Hi Sunny,
du kannst den HTTP-Cache über die Shopware Console aufwärmen.

Das Kommando dazu wäre folgendes:
/html/shopware/bin/console sw:warm:http:cache

Diese Zeile kannst du, wenn du nach unserer Anleitung vorgegangen bist, auch ans Ende des Files /files/shopware.sh hängen. Wichtig ist hier nur, dass der Aufruf nach dem Cron-Aufruf kommt, da der Cron ja den HTTP-Cache (je nach Konfiguration, standardmäßig) leert.

Liebe Grüße
Philipp von Mittwald

Frederik am
Hallo Philipp,

könnten Sie nochmal genau erklären, wie der HTTP-Cache Warm per Cron funktioniert?

Wenn ich den Befehl direkt mit in die shopware.sh Datei schreibe, wird der Cache ja z.B. alle 5 Minuten aufgewärmt? (je nach Intervall)

Oder soll hierfür ein separater Cronjob einrichtet werden?


Freundliche Grüße,
Frederik
Tobias Hüske am
Hallo Frederik,
vielen Dank für deinen Kommentar.

Wie Philipp geschrieben hat, wird durch den Cron der Cache im konfigurierten Intervall automatisch geleert und muss dann natürlich auch wieder aufgewärmt werden.

Folgende "shopware.sh" würde ich demnach empfehlen:

#!/bin/bash
php_cli /html/shopware/bin/console sw:cron:run && php_cli /html/shopware/bin/console sw:warm:http:cache

Bei weiteren Fragen melde dich gerne.

Viele Grüße
Tobias vom Mittwald Software-Team
Matthias Klenk am

Oh, super. Danke für die Performance-Tipps. Den Beitrag habe ich direkt favorisiert.

Grüße aus Berlin

Moritz am

Was ist wenn ich bei meinem Anbieter (aix-cloud) keinen Interpreter auswählen kann?

Philipp Mahlow am

Hallo Moritz,

wenn du bei aix-cloud für den Cronjob keinen Interpreter wählen kannst, würde ich davon ausgehen, dass die Standard-Einstellung funktioniert. Andernfalls würde ich mich an deiner Stelle an den Support deines Hosters wenden. Die können dir bestimmt bei der Einrichtung behilflich sein.

Liebe Grüße aus Espelkamp
Philipp