Top Lessons Learned bei der Optimierung von WordPress (für den Kundenerfolg)
Veröffentlicht: 2022-09-15Wann hattest du das letzte Mal einen Wolke-Sieben-Moment?
Die Schule mit Bravour bestanden.. oder als deine Freundin / dein Freund deinen Antrag angenommen hat?
Ich hatte vor zwei Wochen einen Wolke-Sieben-Moment! Ich habe auf dem WordCamp Mumbai 2017 gesprochen – Indiens größtem WordCamp.
Das Thema war mir ein Herzensanliegen und etwas, mit dem ich mich täglich beschäftige – Lessons Learned, WordPress für den Kundenerfolg optimieren.
Es geht um Probleme, mit denen ich beim Umgang mit großen WordPress-Datenbanken konfrontiert war, und wie ich sie angegangen bin.
Was hat mich ermutigt, beim WordCamp Mumbai zu sprechen?
Die Entwicklung eines WordPress-Plugins ist eine großartige Lernerfahrung. Sie können ein hervorragendes Framework erweitern, sich auf das Schreiben von Code konzentrieren, der die Probleme der Kunden löst, und mit großartigen Teammitgliedern zusammenarbeiten.
Bei StoreApps schreiben Entwickler nicht nur Code, sondern unterstützen auch Kunden. Die Lösung von Kundenanfragen hat mir einige der größten Lektionen gegeben.
Das ist also alles mein Alltag, und es ist ziemlich aufregend.
Aber weißt du, was für mich aufregender ist? Mit großen Datenbanken arbeiten und komplexe Datenbankprobleme lösen!
Unsere Plugins werden von mehr als 35000 Benutzern verwendet. Und ich habe viele Herausforderungen bei der Arbeit mit großen WooCommerce-Shops und beliebten WordPress-Sites gesehen.
Zum Glück konnte ich diese Herausforderungen lösen und habe viel gelernt.
Aber warte, genau wie ich würde es Hunderte von anderen Entwicklern geben, die mit ähnlichen Problemen bei der Arbeit mit WordPress und WooCommerce konfrontiert sind.
Also beschloss ich, meine Lektionen mit anderen zu teilen.
Und welche bessere Plattform gibt es als eine Gelegenheit zum Reden bei Indiens größtem WordCamp!
Die drei Probleme, die mir schlaflose Nächte bereiteten (mit Lösungen und daraus gelernten Lektionen)
Zum Schluss noch die drei Probleme, die ich angesprochen habe. Beginnen wir also nacheinander mit ihnen.
Reduzierung der Seitenladezeit von 3 Minuten auf Millisekunden…
Problem
Ich hatte eine Situation mit dem Smart Coupons-Plugin, bei der eine einfache Funktion zum Anzeigen von Coupons auf den entscheidenden Seiten des Geschäfts (dh Warenkorb-, Kassen- und Mein-Konto-Seiten) den Bezahlvorgang blockierte.
Smart Coupons ist ein Plugin zum Erstellen und Verwalten von Coupons und Geschenkgutscheinen in großen Mengen für einen WooCommerce-Shop.
Lösung
Nun hätte die Verwendung von WP Query zu mehreren JOINs geführt , da zum Anzeigen der verfügbaren Coupons für einen bestimmten Benutzer mehrere Metabedingungen ausgewertet werden müssen.
Anstatt also die ideale Methode zum Abfragen der Datenbank zu verwenden, dh WP Query, habe ich benutzerdefinierte SQL-Abfragen geschrieben.
Außerdem habe ich in den benutzerdefinierten Abfragen Folgendes getan:
- Anstatt alle Metabedingungen in einer einzigen MySQL-Abfrage zu prüfen, habe ich einfach die erste Metabedingung ausgewertet
- Danach habe ich die durch Komma getrennte Liste von post_ids (Gutschein-IDs) in der Optionstabelle gespeichert
- Und dann kartiere ich einfach denselben Satz von post_ids, indem ich jede der anderen Metabedingungen auswerte
Dies tat ich, bis ich einen endgültigen Satz von post_ids erhielt, die für den jeweiligen Benutzer angezeigt werden mussten.
Verbesserung der Lösung
Dies hat die Probleme beim Laden der Seite gelöst. Um jedoch das Laden der Seite unter Millisekunden zu erreichen, wie von unserem Freund vorgeschlagen, musste ich das Problem neu definieren.
Anstatt alle Coupons anzuzeigen, für die der Benutzer berechtigt ist,
Ich habe ein Limit für die Anzahl der Coupons festgelegt , die Benutzern auf den Warenkorb- und Checkout-Seiten angezeigt werden.
Wie wurde ein Timeout-Fehler zum meistverkauften Feature unseres Plugins?
Problem
Für die Verarbeitung sehr großer Datenbankaktualisierungen hatte ich benutzerdefinierte Abfragen geschrieben, da die Verwendung der Kernfunktionen von WordPress möglicherweise zu einem enormen Overhead führen würde.
Beispiel: Wenn jemand die Preise aller Produkte in seinem Geschäft um 40 % senken muss, muss er einfach „Preis“, „um 40 % senken“ auswählen und auf die Schaltfläche „Aktualisieren“ klicken. Mit unserem Plug-in Smart Manager ist dies ganz einfach möglich. Es wurde entwickelt, um Massenaktualisierungen in Ihren WooCommerce-Shops zu vereinfachen.
Aber der Stapelaktualisierungsprozess begann, ins Stocken zu geraten und Zeitüberschreitungsfehler zu verursachen, wenn jemand versuchte, 1.000 Produkte oder den gesamten Shop gleichzeitig zu aktualisieren .
Anfangs habe ich angefangen, die Abfragen zu optimieren, aber das hat nicht geholfen.
Meine Situation war ähnlich wie bei einem Takeshi's Castle-Kandidaten. Egal wie sehr ich es versuchte, ich fiel immer wieder ins Wasser.
Lösung
Man sagt, dass man sich manchmal aus dem Problem herausbewegen und das Problem aus der Vogelperspektive betrachten muss, um die genaue Ursache zu finden.
Ich tat das gleiche und fand heraus, dass das eigentliche Problem war
nicht auf Abfrageebene, sondern auf Anforderungsebene .
Also habe ich anstelle einer einzigen Anfrage, die alle Aktualisierungen durchführte, dasselbe in mehrere aufeinanderfolgende AJAX-Aufrufe aufgeteilt , die kleinere Stapel von Aktualisierungen durchführten, wodurch die Zeitüberschreitungsfehler vollständig beseitigt wurden.
Verbesserung der Lösung
Dieser Ansatz, eine einzelne Anforderung in mehrere kleinere AJAX-Anforderungen aufzuteilen, löste nun nicht nur den Zeitüberschreitungsfehler, sondern verbesserte auch die Stapelaktualisierung von UX .
Jetzt wurde der Filialleiter über den Fortschritt des Updates auf dem Laufenden gehalten, was sein Vertrauen in das Produkt einfach stärkte.
Derselbe Ansatz hat Smart Manager auch in die Lage versetzt, Stapelaktualisierungen für WooCommerce-Shops jeder Form und Größe zu handhaben, und Smart Manager zu einem der meistverkauften Plugins von StoreApps gemacht.
Wie haben uns Shared-Hosting-Umgebungen gezwungen, unser Plugin neu zu schreiben?
Problem
Für jedes Reporting-Plugin ist es sehr wichtig, nicht nur genaue, sondern auch schnelle Statistiken zu liefern. Jetzt erforderte das Abrufen von Berichtsstatistiken mehrere Abfragen, bei denen zwei große WordPress-Tabellen, dh Posts und Postmeta, zusammengeführt wurden.
Wie oben schon gesehen, sind JOINs so teuer .
In Smart Reporter (unserer Reporting-Lösung für WooCommerce) zeigten wir 20 verschiedene Reporting-Statistiken in einem einzigen Seitenaufruf und das auch noch beim Laden der Seite.
Lösung
Also folgte ich dem gleichen Ansatz wie die meisten Reporting-Lösungen, nämlich dem Erstellen einer Übersichtstabelle, dh einer benutzerdefinierten Tabelle mit flacher Struktur.
Diese Tabelle würde eine Zusammenfassung aller vom Plug-in benötigten Daten enthalten und somit die Verwendung von Verknüpfungen eliminieren und die Ladezeiten der Seiten verbessern.
Um diese Übersichtstabellen auf dem neuesten Stand zu halten, haben wir außerdem WordPress-Aktionen und -Filter verwendet.
Zusammenfassung der Lektionen
- Befolgen Sie so weit wie möglich Best Practices
- Keine Abfragen in Schleife
- Vermeiden Sie große komplexe Joins
- Tun Sie mehr auf MySQL-Ebene als auf PHP-Ebene
- Tauchen Sie tiefer in den Code ein
- Zusammenfassung / Benutzerdefiniert / Temp-Tabellen
- Aufmerksamkeit für UX – Reaktionsfähigkeit, Benachrichtigungen …
- Lösen Sie das richtige Problem?
Was ist Ihre Wahl?
Ich bin sicher, Sie haben sich mit einigen großen Problemen befasst und Lösungen dafür gefunden. Lassen Sie es uns in unserem Kommentarbereich unten wissen. Es wäre wirklich wertvoll für die Leser.