核心价值观察进入视口的元素,按需加载图片与模块,降低初始负载。用 content-visibility 提前跳过不可见子树布局与绘制,并通过 contain-intrinsic-size稳定占位。结构与样式<ul class="feed"> <li class="item"><img data-src="/img/a.jpg" alt="" /></li> <li class="item"><img data-src="/img/b.jpg" alt="" /></li> <li class="item"><img data-src="/img/c.jpg" alt="" /></li> </ul> .feed { display: grid; gap: 12px; } .item { content-visibility: auto; contain-intrinsic-size: 200px; } .item img { inline-size: 100%; block-size: auto; object-fit: cover; } 懒加载逻辑const io = new IntersectionObserver((entries) => { for (const e of entries) { if (e.isIntersecting) { const img = e.target.querySelector('img') if (img && img.dataset.src) { img.src = img.dataset.src img.removeAttribute('data-src') } io.unobserve(e.target) } } }, { rootMargin: '200px 0px' }) document.querySelectorAll('.item').forEach((el) => io.observe(el)) 治理建议对首屏关键图仍使用正常加载并配合 `priority/fetchpriority`;懒加载适用于次要与下方资源。预留合理 `contain-intrinsic-size`,避免解码后高度变化导致 CLS。结论IO 懒加载与 content-visibility 的组合可在不牺牲体验的前提下显著降低初始渲染与主线程压力,提升整体性能与稳定性。

发表评论 取消回复