Die Langsamkeit von Prestashop kann mehrere Ursachen haben, die es zu identifizieren gilt.

Bevor Sie beginnen, müssen Sie wissen, warum Sie glauben, dass Ihr Prestashop langsam ist. Wenn es daran liegt, dass es bei Tools wie Pagespeed Insights von Google oder GTMetrix schlecht abschneidet, sollten Sie unseren Artikel zu diesem Thema lesen: Den Pagespeed-Score Ihres Prestashops verstehen und verbessern . Wenn es sich hingegen um eine allgemeine Langsamkeit des Shops und sogar des Backoffice handelt, dann hat Ihr Prestashop wahrscheinlich zu lange Antwortzeiten, wir sprechen hier von einer zu langsamen TTFB (Time To First Byte). Dieser Artikel wird Ihnen helfen, das TTFB-Problem zu identifizieren.

Überprüfen Sie die Einstellungen auf der Seite Leistung von Prestashop

Als erstes gehen Sie in die Prestashop-Leistungseinstellungen im Menü "Erweiterte Einstellungen" und dann "Leistung". Überprüfen Sie sie dann mithilfe unseres Artikels "Die richtigen Einstellungen zur Verbesserung der Prestashop-Performance ".

Löschen Sie unnötige Module

Prestashop wird mit vielen Standardmodulen ausgeliefert und einige davon sind unnötig oder überflüssig. Wenn Sie zum Beispiel Google Analytics verwenden, brauchen Sie wahrscheinlich nicht die vielen Statistikmodule.

Gehen Sie ruhig die Liste Ihrer Module durch und fragen Sie sich bei jedem einzelnen, ob es wirklich notwendig ist oder nicht.

Führen Sie ein Profiling durch

Als "Profiling" bezeichnet man die Messung mehrerer Daten während der Generierung einer Seite. Bei Prestashop kann man also die Zeit, den verbrauchten Speicher, die ausgeführten SQL-Anfragen usw. bei der Erstellung der Produktseiten, der Kategorien, der Startseite usw. messen, aber auch auf der Seite des Backoffice für die Verwaltung des Shops. Das Laden der Seiten kann auch auf der Backoffice-Seite langsam sein, und es ist wichtig, sie zu optimieren, damit Sie weniger Zeit mit der Verwaltung Ihres Shops verbringen (und nicht ausrasten, weil sie sich verlangsamt!).

SQL Profiling

Ich beginne mit dem SQL-Profiling, da es sich als am effektivsten erweist. Denn die meisten Verlangsamungen werden in der Regel durch schlecht optimierte SQL-Abfragen verursacht. Verzögerungen aufgrund von PHP-Code sind selten, es sei denn, es handelt sich um die Verarbeitung einer langen Liste von Dateien.

Prestashop bietet einen "Profiling"-Modus an, den ich im folgenden Abschnitt näher erläutern werde. Dieser Modus ist jedoch nicht vollständig zufriedenstellend, da er lediglich einen erheblichen "Dump" von Daten direkt auf den angezeigten Seiten generiert und nicht für Ajax-Anfragen aktiviert werden kann.

Deshalb habe ich ein Modul entwickelt, das alle Abfragen an den MySQL-Server aufzeichnet, analysiert und organisiert, um Ihnen einen detaillierten Bericht zu liefern, der verdächtige Abfragen hervorhebt, die Ihre Aufmerksamkeit verdienen. Ich habe es bereits bei mehreren Kunden getestet, die Verlangsamungen in ihrem Prestashop-Shop erlebten, und das Modul identifizierte sofort die Ursache der Verzögerung.

Das Modul kann in der Produktion verwendet werden, da sein Einfluss auf die Besucher minimal ist. Tatsächlich ist das Profiling nur für den Administrator aktiv, der es aktiviert.

Diese Funktion ist in das Modul Speed Pack (Page Cache Ultimate + WEBP + SQL Profiling + Database cleaning) integriert, steht aber auch als eigenständiges Modul zur Verfügung: SQL Profiler .

Profiling in Prestashop integriert

Um das Profiling zu aktivieren, ändern Sie die Konstante _PS_DEBUG_PROFILING_ in der Datei /config/defines.inc.php.

Wenn der Shop für Kunden geöffnet ist, können Sie das Tool nur für sich selbst aktivieren, indem Sie Ihre IP wie folgt angeben:

define('_PS_DEBUG_PROFILING_', $_SERVER['REMOTE_ADDR'] == '37.123.456.789');

Sie können Ihre IP unter https://www.whatsmyip.org/ erfahren

Sobald Sie das Profiling aktiviert haben, werden Sie auf allen Back-Office- und Front-Office-Seiten mehrere Tabellen sehen. Lassen Sie uns diese Daten gemeinsam durchgehen:

  • Loading time: Dies ist die TTFB. Wenn sie mehr als 1 Sekunde (1000ms) beträgt, liegt ein Problem mit einer langen TTFB vor
  • Querying time: Wenn dieQuerying time mehr als 50% der Loading time beträgt, haben Sie eine langsame SQL-Abfrage, die zu oft ausgeführt wird oder Ihr Datenbankserver ist nicht leistungsstark genug.
  • Queries: Dies ist die Anzahl der ausgeführten SQL-Abfragen. Erschrecken Sie nicht, bei Prestashop ist sie enorm!

Ich werde nicht alles aufzählen, nur die wichtigsten Daten.

Sie finden auch eine Tabelle mit den Spalten "Time", "Cumulated Time", "Memory Usage" und "Memory Peak Usage" sowie die folgenden Zeilen:

  • config: Dies ist die Ladezeit des Prestashop CMS, wenn es hier sehr langsam ist, dann ist Ihr Server nicht leistungsstark genug oder falsch konfiguriert
  • _construct: Zeit, die im Konstruktor des Controllers verbracht wird
  • init: Zeit, die in der Methode init() des Controllers verbracht wird
  • checkAccess: Zeit, die in der checkAccess() Methode des Controllers verbracht wird, um die Berechtigungen zu überprüfen, normalerweise auf 0 (oder sehr kurz)
  • setMedia: Zeit, die in der setMedia()-Methode des Controllers zum Hinzufügen von CSS- oder Javascript-Dateien verbracht wird, normalerweise sehr kurz
  • postProcess: Zeit, die in der postProcess()-Methode des Controllers verbracht wird, um die Formulardaten zu speichern. Kann je nach Formular und den durchzuführenden Prozessen sehr lang sein. Auf einer klassischen Anzeigeseite wie Produkte, Kategorien usw. sollte der Wert 0 sein.
  • initHeader: Zeit, die in der initHeader()-Methode des Controllers verbracht wird. Hier werden die anzuzeigenden Daten abgerufen, obwohl dies oft in der initContent() Methode geschieht.
  • initContent: Zeit, die in der initContent()-Methode des Controllers verbracht wird. Hier wird der "displayHeader"-Hook der Module aufgerufen und der größte Teil der Verarbeitung, die den Inhalt der Webseite erzeugt.
  • initFooter: Zeit, die in der initFooter()-Methode des Controllers verbracht wird. Oft leer, da nur wenige Controller hier Verarbeitungen durchführen.
  • display: Zeit, die in der Methode display() des Controllers verbracht wird. Dies ist die Zeit, die Smarty benötigt, um die Seite zu rendern, d. h. die Zeit, die für das Kompilieren der Templates und das Füllen der Werte aufgewendet wird. Wenn die Zeit sehr lang ist, haben Sie vielleicht vergessen, den Cache von Smarty zu aktivieren, oder es sind wirklich viele Elemente anzuzeigen. Es kann auch ein Modul oder ein Widget sein, das in einem seiner Hooks sehr langsam ist.

Leider gibt es in PS1.7 keine Informationen mehr über die Ausführung von Modulen und Hooks, ein Pull Request #20673 wurde geschlossen, aber ich weiß nicht, in welche Version er umgelagert wird. In der Zwischenzeit können Sie, wenn Sie Page Cache Ultimate haben, diese Daten im integrierten Profiling-Tool finden.

Die Tabelle"Stopwatch SQL - xxx queries" listet alle ausgeführten SQL-Abfragen auf, von der langsamsten bis zur schnellsten. Ich persönlich betrachte eine Abfrage, die länger als 100 ms dauert, als langsam. Wenn jedoch die Größenordnung der Zeiten gleich ist, d. h. wenn eine einzige Abfrage sich nicht durch ihre Langsamkeit von den anderen abhebt, dann könnte es sein, dass der MySQL-Server nicht leistungsfähig genug ist.

Profiling, das vom Modul Page Cache Ultimate bereitgestellt wird

Unser Modul Page Cache Ultimate (également intégré au module Speed Pack (Page Cache Ultimate + WEBP + SQL Profiling + Database cleaning) ) bietet ein Werkzeug, um die Zeit zu messen, die jedes Modul in jedem Hook verbringt. Das Verfahren zur Analyse der Langsamkeit einer Webseite ist wie folgt:

  1. aktivieren Sie das Profiling auf der Konfigurationsseite von Page Cache Ultimate
  2. leeren Sie die Profiling-Daten
  3. zeigen Sie die langsame Webseite an
  4. aktualisieren Sie die Datentabelle und sortieren Sie sie nach "Dauer", vom größten zum kleinsten Wert

Wenn ein Modul viel langsamer als die anderen ist, ist es wahrscheinlich der Übeltäter. In diesem Fall ist die Lösung, den Entwickler zu kontaktieren und ihn um eine Optimierung der Ladegeschwindigkeit des Moduls zu bitten. Wenn Sie mehrere langsame Module sehen, kann es sein, dass das Problem mit der Leistung des Apache-Servers oder des Datenbankservers (MySQL oder MariaDb) zusammenhängt.

Überprüfen Sie die Leistung Ihres Hostings

Wenn beim Profiling keine Verdächtigen oder Hinweise auftauchen und die Langsamkeit weit verbreitet ist, dann ist Ihr Server möglicherweise nicht richtig konfiguriert oder nicht leistungsfähig genug.

Version von PHP

Überprüfen Sie zunächst, ob die PHP-Version in Ordnung ist. Schauen Sie sich diese Tabelle an, um zu erfahren, welche PHP-Version Sie je nach Prestashop-Version mindestens haben sollten:

Version von PHP
Version von PrestaShop ≤ 5.1 5.2 5.3 5.4 5.5 5.6 7.0 7.1 7.2 7.3 7.4 ≥ 8.0
1.6.1.x Nein Ja Ja Ja Ja Ja Ja Empfohlene Version Nein Nein Nein Nein
1.7.0 ~ 1.7.3 Nein Nein Nein Ja Ja Ja Ja Empfohlene Version Nein Nein Nein Nein
1.7.4 Nein Nein Nein Nein Nein Ja Ja Empfohlene Version Nein Nein Nein Nein
1.7.5 ~ 1.7.6 Nein Nein Nein Nein Nein Ja Ja Ja Empfohlene Version Nein Nein Nein
1.7.7 Nein Nein Nein Nein Nein Nein Nein Ja Ja Empfohlene Version Nein Nein
1.7.8 Nein Nein Nein Nein Nein Nein Nein Ja Ja Ja Empfohlene Version Nein

Legende: = Empfohlene Version, Ja = Unterstützt, Nein = Nicht unterstützt

PHP-Einstellungen und -Erweiterungen

Sie können auch dieses PHP-Skript verwenden, um zu überprüfen, ob Ihr Apache-Server korrekt für Prestashop konfiguriert ist. Es wird die für das CMS wichtigen Einstellungen und Erweiterungen überprüfen:

Pré-requis techniques pour Prestashop

Schlussfolgerung

Wenn Ihr TTFB nach all diesen Tests und Korrekturen immer noch sehr lang ist, über 1 Sekunde, sollten Sie ein leistungsfähigeres Hosting-Paket in Betracht ziehen oder unser HTML-Cache-Modul installieren Page Cache Ultimate .

In jedem Fall wünsche ich Ihnen viel Erfolg und hoffe, dass Sie Ihre Leistungsprobleme unter Prestashop schnell lösen können!