Shopware Performance Tipps

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
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

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

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

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.

 

Kommentare

  1. Gravatar
    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

    Antworten
  2. Gravatar
    Ralf am

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

    Antworten
    1. 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

      Antworten
    2. 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

      Antworten
  3. Gravatar
    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

    Antworten
    1. 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

      Antworten
  4. Gravatar
    Matthias Klenk am

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

    Grüße aus Berlin

    Antworten
  5. Gravatar
    Moritz am

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

    Antworten
    1. 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

      Antworten

Kommentar hinzufügen