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.

  1. 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;
    
  2. Stellen Sie sicher, dass die Warteschlangen-Handler ausgeführt werden:

    code language-bash
    pgrep -fl media.storage.catalog.image.resize
    
  3. Füllen Sie die Warteschlange mit allen Bildgrößenanforderungen aus:

    code language-bash
    bin/magento catalog:images:resize --async
    
  4. 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.

  1. Melden Sie sich beim Server an.
  2. Navigieren Sie zu "pub/media/catalog/product"und notieren Sie sich einen der Hashes (z. B. 0047d83143a5a3a4683afdf116df680).
  3. 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.
sed
code language-bash
cd pub/
find ./media/catalog/product -path ./media/catalog/product/cache -prune -o -type f -print | sed 's~./media/catalog/product/~https://www.example.com/media/catalog/product/cache/0047d83143a5a3a4683afdf1116df680/~g' > images.txt
Belagerung

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
siege --file=./images.txt --user-agent="image-resizer" --no-follow --no-parser --concurrent=10 --reps=once
curl
code language-bash
xargs -0 -n 1 -P 10 curl -X HEAD -s -w "%{http_code} %{time_starttransfer} %{url_effective}\n" < <(tr \\n \\0 <images.txt)

Das Argument -P bestimmt die Anzahl der Threads.

Bash One-Liner

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
find ./media/catalog/product -path ./media/catalog/product/cache -prune -o -type f -print | sed 's~./media/catalog/product/~https://www.example.com/media/catalog/product/cache/0047d83143a5a3a4683afdf1116df680/~g' | xargs -n 1 -P 10 curl -X HEAD -s -w "%{http_code} %{time_starttransfer} %{url_effective}\n"

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.

NOTE
recommendation-more-help
754cbbf3-3a3c-4af3-b6ce-9d34390f3a60