Die EAV-Steuer: Warum das Laden von Magento-Produkten langsam ist
Magento-Nutzer beschweren sich oft über die Geschwindigkeit. Viele dieser Nutzer zahlen eine EAV-Steuer, ohne es zu wissen.
Ein Produkt in Magento ist keine einzelne Zeile. Es ist eine Sammlung von Zeilen, die über viele Tabellen verteilt sind. Eine Tabelle enthält statische Spalten. Andere Tabellen enthalten spezifische Datentypen wie varchar, int, decimal, text und datetime.
Um ein Produkt zu laden, liest Magento aus jeder dieser Tabellen. Anschließend werden sie wieder zu einem Objekt zusammengesetzt. Wenn Sie eine Store-View hinzufügen, verdoppelt sich der Aufwand.
Die größte Falle ist die Verwendung von addAttributeToSelect('*').
Das Sternchen bedeutet, dass Sie jedes Attribut laden. Wenn eine Kategorieseite 36 Produkte anzeigt, benötigt sie möglicherweise nur sechs Felder wie Name und Preis. Wenn Sie das Sternchen verwenden, laden Sie stattdessen sechzig Felder. Magento liest, verknüpft und verarbeitet vierundfünfzig zusätzliche Felder, nur um sie dann wieder wegzuwerfen.
Sie können dies in fünf Minuten beheben.
Hören Sie auf, das Sternchen zu verwenden. Listen Sie genau die Spalten auf, die Sie benötigen:
- name
- price
- small_image
- url_key
- status
- visibility
Diese Änderung ist der größte Gewinn für langsame Listing-Seiten.
Für eine grundlegendere Lösung sollten Produkte auf Listing-Seiten nicht aus EAV wieder zusammengesetzt werden. Kategorieseiten und die Suche sollten aus Index-Tabellen und OpenSearch lesen. Magento pflegt diese Indizes für Sie. Eine schnelle Kategorieseite stützt sich auf diese Indizes und greift nur für die wenigen Attribute, die das Template ausgibt, auf EAV zu.
Verwenden Sie nicht die Flat-Catalog-Funktion. Adobe hat sie als veraltet eingestuft (deprecated), da sie bei einer großen Anzahl von Attributen versagt. Sie verursacht einen hohen Indexierungsaufwand und stößt an die MySQL-Spaltenlimits.
Befolgen Sie diese Regeln für eine bessere Performance:
- Wählen Sie nur benannte Attribute aus. Verwenden Sie niemals das Sternchen in Collections, die für Benutzer gerendert werden.
- Nutzen Sie OpenSearch für das Listing und das Filtern.
- Verwenden Sie für Massenexporte Keyset-Pagination nach
entity_id. - Wählen Sie für Exporte nur die Felder aus, die Sie tatsächlich benötigen.
Messen Sie Ihre Ergebnisse. Aktivieren Sie Ihr Query-Log. Wenn eine einzige Kategorieseite hunderte von Abfragen auslöst, ist die EAV-Rekonstruktion die Ursache. Jetzt wissen Sie, wie Sie die Codezeile finden, die das Problem verursacht.
Quelle: https://dev.to/iamrobindhiman/the-eav-tax-why-magento-product-loads-are-slow-117h
