Aanbevolen werkwijzen voor het wijzigen van het formaat van catalogusafbeeldingen

Alle catalogusafbeeldingen moeten worden vergroot of verkleind voordat een winkel in productie wordt genomen. Als u het formaat van afbeeldingen niet aanpast voordat de productie wordt uitgevoerd, wordt het formaat van de afbeelding tijdens het laden van de pagina forceerd aangepast. Hierdoor wordt de snelheid van de site aanzienlijk verlaagd en wordt de server gedurende de eerste dagen tot weken na het opstarten meer belast.

De trage weg

Gebruik het standaard CLI bevel resize alle beelden:

bin/magento catalog:images:resize

De nadelen van deze aanpak zijn:

  • Het proces is single-threaded
  • Het proces wijzigt de grootte van afbeeldingen die al zijn gewijzigd
  • Het proces kan niet worden onderbroken, wat dagen kan duren

De snelle (er) manier

Asynchrone afbeeldingsformaatwijziging is geïntroduceerd in Adobe Commerce 2.4 en kan afbeeldingen sneller vergroten of verkleinen.

  1. Start op elke webserver tijdelijk een aantal extra wachtrijhandlers (twee keer zoveel fysieke processors per server):

    code language-bsh
    for i in {1.."$((2 * `nproc --all`))"};do bin/magento queue:consumers:start media.storage.catalog.image.resize &;done;
    
  2. Verifieer dat de rijmanagers lopen:

    code language-bash
    pgrep -fl media.storage.catalog.image.resize
    
  3. Vul de wachtrij met alle aanvragen voor het vergroten of verkleinen van afbeeldingen:

    code language-bash
    bin/magento catalog:images:resize --async
    
  4. Nadat de grootte van alle afbeeldingen is gewijzigd, beëindigt u het proces:

    code language-bash
    pkill -f media.storage.catalog.image.resize
    

De snelle weg

Er is een andere manier om het formaat van afbeeldingen te wijzigen met de voorzijde.

De voordelen van deze aanpak zijn:

  • Het proces is multi-threaded
  • Het proces bestaat uit meerdere servers (als u meerdere webknooppunten hebt, een taakverdelingsmechanisme en gedeelde schijfruimte voor de map media/ )
  • Tijdens het proces worden afbeeldingen overgeslagen waarvan de grootte al is gewijzigd

Deze benadering resizes 100.000 beelden in minder dan 8 uren, terwijl het CLI bevel 6 dagen om vergt te voltooien.

  1. Log in bij de server.
  2. Navigeer naar pub/media/catalog/product en noteer een van de hashes (bijvoorbeeld 0047d83143a5a3a4683afdf116df680).
  3. In de volgende voorbeelden vervangt u www.example.com door het domein van de winkel en vervangt u de hash door de hash die u hebt vermeld.
gebruikt
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
beleg

Het nadeel van siege is dat het alle URL's in de 10 keer bezoekt als de gelijktijdige uitvoering is ingesteld op 10.

code language-bash
siege --file=./images.txt --user-agent="image-resizer" --no-follow --no-parser --concurrent=10 --reps=once
krullen
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)

Het argument -P bepaalt het aantal draden.

bash één-lijn

De één-lijn voor het voorbeeld find/curl, voor het geval u curl van de zelfde machine kunt in werking stellen de beelden zijn:

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"

Vervang www.example.com nogmaals door het domein van uw website en stel -P in op het aantal threads dat uw server kan verwerken zonder vastlopen.

De uitvoer retourneert een lijst met alle productafbeeldingen in de winkel. U kunt door de afbeeldingen (met siege of een andere crawler) kruipen met alle servers en processorcores die voor u beschikbaar zijn en de formaatcache aanzienlijk sneller genereren dan bij andere benaderingen.

Als u één URL voor de afbeeldingscache bezoekt, worden alle afbeeldingsgrootten op de achtergrond gegenereerd als deze nog niet bestaan. Bovendien worden bestanden overgeslagen waarvan de grootte al is gewijzigd.

NOTE
  • Adobe Commerce op cloud-infrastructuurprojecten kan de grootte van productafbeeldingen verschuiven naar de Fastly-service. Zie Diepe beeldoptimaliseringin de Gids van de Wolk.
  • Als u de externe opslagmodule gebruikt, kunt u ook proberen de afbeeldingsgrootte te verschuiven naar nginx. Zie beeld het resizing voor verre opslagin de Gids van de Configuratie vormen.
recommendation-more-help
754cbbf3-3a3c-4af3-b6ce-9d34390f3a60