目录图像大小调整最佳实践

在商店投入生产之前,应调整所有目录图像的大小。 在生产之前无法调整图像大小会在页面加载期间强制调整图像大小,这会显着降低网站速度并在启动后的前几天到几周内增加服务器负载。

慢条斯理

使用默认的CLI命令调整所有映像的大小:

bin/magento catalog:images:resize

这种方法的缺点包括:

  • 此过程是单线程的
  • 该过程会调整已调整大小的图像的大小
  • 此过程无法中断,可能需要几天时间

快速方式

Adobe Commerce 2.4中引入了异步图像大小调整功能,可更快地调整图像大小。

  1. 在每台Web服务器上,临时启动一些额外的队列处理程序(每台服务器的物理处理器数的两倍):

    code language-bsh
    for i in {1.."$((2 * `nproc --all`))"};do bin/magento queue:consumers:start media.storage.catalog.image.resize &;done;
    
  2. 验证队列处理程序是否正在运行:

    code language-bash
    pgrep -fl media.storage.catalog.image.resize
    
  3. 用所有图像大小调整请求填充队列:

    code language-bash
    bin/magento catalog:images:resize --async
    
  4. 调整所有图像大小后,终止进程:

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

快捷方式

还有另一种使用前端来调整图像大小的方法。

此方法的优点包括:

  • 此过程是多线程的
  • 进程是多服务器(如果您有多个Web节点、负载平衡器以及media/目录的共享磁盘空间)
  • 流程会跳过已调整大小的图像

此方法在不到8小时内就调整了100,000个映像的大小,而CLI命令需要6天才能完成。

  1. 登录到服务器。
  2. 导航到pub/media/catalog/product并记下其中一个哈希(例如,0047d83143a5a3a4683afdf1116df680)。
  3. 在以下示例中,将www.example.com替换为您商店的域,并将哈希替换为您指出的域。
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
围攻

siege的缺点是,如果并发设置为10,则它访问10次中的所有URL。

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)

-P参数确定线程数。

bash one-liner

find/curl示例的单行,以防您可以从映像所在的同一计算机上运行curl

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"

再次将www.example.com替换为您的网站域,并将-P设置为您的服务器可以处理的线程数,而不会崩溃。

输出将返回商店中所有产品图像的列表。 您可以使用所有可用的服务器和处理器内核来爬网图像(使用siege或任何其他爬网程序),并以比其他方法快得多的速度生成大小调整缓存。

访问一个图像缓存URL时,如果背景中的所有图像大小尚不存在,则会生成这些大小。 此外,它会跳过已调整大小的文件。

NOTE
  • 云基础架构项目上的Adobe Commerce可以将产品图像大小调整卸载到Fastly服务。 请参阅​_云指南_​中的深度图像优化
  • 如果使用远程存储模块,还可以尝试将图像大小调整卸载到nginx。 请参阅​_配置指南_​中的为远程存储配置映像大小
recommendation-more-help
754cbbf3-3a3c-4af3-b6ce-9d34390f3a60