Files
wordpress-kratos-yang/assets/css
laoyang f3583e07c5 perf(lightbox): 点开图片不再白屏干等,先糊后清 #10
用户反馈:点一张图之后先是白背景渲染出来,图片迟迟不出现,感觉特别慢。

实测归因(_v40_slow.py,自建慢速 HTTP 服务,3.2 Mbps):
  · 遮罩可见 31ms      —— 纯 CSS 底色,一帧就画完,从来不是瓶颈
  · 图片有像素 6 秒后仍然没有
线上原图最大 3.2MB(PUA的两面性与界定-scaled.png),3Mbps 下要 8 秒以上,
这段时间屏幕上是整片白 + 一个 0x0 的空 img。

三层改造:
1. 缩略图占位(blur-up):点开瞬间把正文里已经解码过的 currentSrc 顶上,
   0 延迟就有像素;原图到了再淡入覆盖。
2. 原图淡入:is-ready 后 opacity 0→1,避免看到渐进渲染的半张图。
3. 空闲预取:requestIdleCallback 里串行预取视口上下 1.5 屏内的原图,
   用 new Image() 不塞 DOM;尊重 saveData / slow-2g。

CSS 的 .yang-lb-stage 从 flex 改 grid,占位层/原图/转圈都 grid-area:1/1
叠在同一个格子(flex 会让子元素并排,absolute 又不参与居中)。

实测(_v40_opt2.py,5/0):
  立刻点(最坏)  遮罩 25ms · 首帧有像素 25ms · 原图 15012ms
  读 12 秒后点    遮罩 25ms · 首帧有像素 25ms · 原图 25ms(预取命中)
服务端各收到 1 次请求,预取一次命中、没有重复下载。

验证:交互 245/0(新增 J 段占位层与加载态 45 条)· 服务端 55/0(8.4+8.5)
· 演示页 34/0 · 反向验证 27/27(新增 U11~U14)

Refs #10
2026-10-25 23:03:13 +08:00
..