Bästa tillvägagångssätt för att ändra storlek på katalogbilder

Alla katalogbilder bör storleksändras innan en butik går till produktion. Om det inte går att ändra storlek på bilder innan produktionen tvingar det fram en storleksändring under sidinläsningen, vilket minskar webbplatshastigheten avsevärt och ökar serverbelastningen under de första dagarna till veckor efter start.

Den långsamma vägen

Använd det förvalda CLI-kommandot för att ändra storlek på alla bilder:

bin/magento catalog:images:resize

Nackdelarna med detta tillvägagångssätt är bland annat:

  • Processen är entrådad
  • Processen ändrar storlek på bilder som redan har ändrat storlek
  • Processen kan inte avbrytas, vilket kan ta dagar

Snabba(er) vägen

Asynkron storleksändring av bilder introducerades i Adobe Commerce 2.4 och det går snabbare att ändra storlek på bilder.

  1. Starta tillfälligt några extra köhanterare på alla webbservrar (dubbelt så många fysiska processorer 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. Kontrollera att köhanterarna körs:

    code language-bash
    pgrep -fl media.storage.catalog.image.resize
    
  3. Fyll kön med alla begäranden om storleksändring av bilder:

    code language-bash
    bin/magento catalog:images:resize --async
    
  4. Avsluta processen när alla bilder har ändrat storlek:

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

Den snabba vägen

Det finns ett annat sätt att ändra storlek på bilder med hjälp av förgrunden.

Fördelarna med detta tillvägagångssätt är bland annat:

  • Processen är flertrådig
  • Processen är flerserver (om du har flera webbnoder, en belastningsutjämnare och delat diskutrymme för katalogen media/)
  • Processen hoppar över bilder som redan har ändrat storlek

Detta arbetssätt ändrar storlek på 100 000 bilder på mindre än 8 timmar, medan det tar 6 dagar att slutföra CLI-kommandot.

  1. Logga in på servern.
  2. Navigera till pub/media/catalog/product och notera en av hash-koderna (till exempel 0047d83143a5a3a4683afdf116df680).
  3. Ersätt www.example.com med domänen för din butik i följande exempel och ersätt hash-koden med den som du angav.
Använt
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
belägring

Nackdelen med siege är att den besöker alla URL:er i tio gånger om samtidighet har angetts till 10.

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)

Argumentet -P avgör antalet trådar.

bash one-line

Den linjära för exemplet find/curl om du kan köra curl från samma dator som bilderna finns på:

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"

Ersätt igen www.example.com med webbplatsens domän och ställ in -P på det antal trådar som servern kan hantera utan att krascha.

Utdata returnerar en lista med alla produktbilder i butiken. Du kan crawla bilderna (med siege eller någon annan crawler) med alla servrar och processorkärnor som är tillgängliga för dig och generera cacheminnet för storleksändring med betydligt högre hastighet än andra metoder.

Om du besöker en URL för bildcache genereras alla bildstorlekar i bakgrunden om de inte finns än. Dessutom hoppas filer som redan har ändrat storlek över.

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