切到 AVIF 后单张转换耗时 8 秒,队列从两千涨到四万,新上传的图两小时还没生成缩略图。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
avifenc -s 8 -q 60 -j 4 in.jpg out.avif time avifenc -s 8 -q 60 in.jpg out.avif
AVIF 编码比 WebP 慢一个数量级,worker 数量又没跟着加,队列消费速度只有生产速度的三分之一。重试失败的任务还会回到队头。这一点先确认清楚,后面就不用反复试。
「AVIF 转换慢」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
改完隔一天再看一次,当场正常不代表能稳住。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
具体做法是,只对首屏和详情大图生成 AVIF,列表缩略图继续用 WebP;把 worker 从 2 加到 8,并给单张设 20 秒超时;监控队列长度,超过一万就自动降级回 WebP。
改完照着核一遍,队列长度回落到一千以内,新图十分钟内生成完。
