Best Practices für die Größenanpassung von Katalogbildern
Alle Katalogbilder sollten in der Größe angepasst werden, bevor ein Store in die Produktion aufgenommen wird. Wenn die Bildgröße vor der Produktion nicht geändert werden kann, wird die Bildgröße beim Laden der Seite erzwungen, wodurch die Site-Geschwindigkeit erheblich reduziert und die Server-Last in den ersten Tagen bis Wochen nach dem Start erhöht wird.
Der langsame Weg
Verwenden Sie den standardmäßigen CLI-Befehl, um die Größe aller Bilder zu ändern:
bin/magento catalog:images:resize
Zu den Nachteilen dieses Ansatzes zählen:
- Der Prozess ist einprozessgestützt
- Der Prozess ändert die Größe von Bildern, deren Größe bereits geändert wurde
- Der Prozess kann nicht unterbrochen werden, was Tage dauern kann
Der schnelle (er) Weg
Die asynchrone Bildanpassung wurde in Adobe Commerce 2.4 eingeführt und kann die Bildgröße beschleunigen.
-
Starten Sie auf jedem Webserver einige zusätzliche Warteschlangen-Handler vorübergehend (doppelt so viele physische Prozessoren pro Server):
code language-bsh for i in {1.."$((2 * `nproc --all`))"};do bin/magento queue:consumers:start media.storage.catalog.image.resize &;done;
-
Stellen Sie sicher, dass die Warteschlangen-Handler ausgeführt werden:
code language-bash pgrep -fl media.storage.catalog.image.resize
-
Füllen Sie die Warteschlange mit allen Bildgrößenanforderungen aus:
code language-bash bin/magento catalog:images:resize --async
-
Nachdem die Größe aller Bilder geändert wurde, beenden Sie den Prozess:
code language-bash pkill -f media.storage.catalog.image.resize
Der schnelle Weg
Es gibt eine andere Möglichkeit, die Größe von Bildern mithilfe des Frontend zu ändern.
Zu den Vorteilen dieses Ansatzes zählen:
- Der Prozess ist mehrprozessgestützt
- Der Prozess erfolgt über mehrere Server (wenn Sie mehrere Webknoten, einen Lastenausgleich und freigegebenen Speicherplatz für den Ordner "
media/
"haben). - Der Prozess überspringt Bilder, deren Größe bereits geändert wurde
Bei diesem Ansatz wird die Größe von 100.000 Bildern in weniger als 8 Stunden geändert, während der CLI-Befehl 6 Tage dauert.
- Melden Sie sich beim Server an.
- Navigieren Sie zu "
pub/media/catalog/product
"und notieren Sie sich einen der Hashes (z. B. 0047d83143a5a3a4683afdf116df680). - Ersetzen Sie in den folgenden Beispielen
www.example.com
durch die Domäne Ihres Stores und ersetzen Sie den Hash durch den Hash, den Sie notiert haben.
code language-bash |
---|
|
Der Nachteil von siege
besteht darin, dass alle URLs in den 10-mal aufgerufen werden, wenn die Parallelität auf 10 gesetzt ist.
code language-bash |
---|
|
code language-bash |
---|
|
Das Argument -P
bestimmt die Anzahl der Threads.
Das Einliner für das Beispiel find/curl
, falls Sie curl
von demselben Computer aus ausführen können, auf dem sich die Bilder befinden:
code language-bash |
---|
|
Ersetzen Sie erneut www.example.com
durch die Domäne Ihrer Website und legen Sie -P
auf die Anzahl der Threads fest, die Ihr Server ohne Abstürze verarbeiten kann.
Die Ausgabe gibt eine Liste aller Produktbilder im Store zurück. Sie können die Bilder (mit siege
oder einem anderen Crawler) durchsuchen, indem Sie alle für Sie verfügbaren Server und Prozessorkerne verwenden und den Cache für die Größenanpassung mit deutlich höherer Geschwindigkeit als bei anderen Ansätzen generieren.
Beim Besuch einer Bild-Cache-URL werden alle Bildgrößen im Hintergrund generiert, wenn sie noch nicht vorhanden sind. Außerdem werden Dateien übersprungen, deren Größe bereits geändert wurde.
- Adobe Commerce in Cloud-Infrastrukturprojekten kann Produktbilder in der Größenanpassung an den Fastly-Dienst abladen. Siehe Optimierung des tiefen Bildes im Cloud-Handbuch.
- Wenn Sie das Remote-Speichermodul verwenden, können Sie auch versuchen, die Größe des Bildes auf nginx zu verändern. Siehe Konfigurieren der Bildgröße für Remote-Speicher im Konfigurationshandbuch.