起因
用户反馈「下载下来的图里混着一堆 360×360 的缩略图」。第一反应是把过滤阈值从 100 调到 360,但改完发现真正的商品大图也被丢掉了。
原因
淘宝、京东的懒加载实现里,img.src 常常先指向一张 360×360 的缩略图,data-src 才是原图。按当前加载出来的尺寸判断,就会把原图当成小图。
解决
把规则改成:能还原成原图的地址,不参与尺寸判断。
const best = upgradeImageUrl(url);
if (w && h && (best === url) && min(w, h) <= 360) return; // 只有无法还原时才按尺寸过滤
还原后的地址交给图片库页面,用 Image() 加载出真实尺寸再判定。
结果
召回率不变,误杀率归零;顺带把「先下载再筛」的返工也省了。