document.querySelectorAll('.ad-slot').forEach(function(el) {
new IntersectionObserver(function(es, o) {
if (es[0].isIntersecting) { loadAd(el); o.disconnect(); }
}).observe(el);
});
改版后一页放了 8 个广告位,移动端 LCP 从 2.1 秒涨到 5.1 秒,跳出率跟着涨了一成。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,每个广告位都加载一遍脚本,首屏的图片和广告抢带宽。广告容器没有预留尺寸,加载时反复重排。
「广告位 LCP」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
处理上按这个顺序:首屏只保留一个广告位,其余往下移;首屏以下的广告位滚动到附近再加载;给广告容器写好宽高比,避免重排;用性能工具测一次 LCP 和广告请求数。
改完只确认一件事:移动端 LCP 回到 2.5 秒以内,首屏只发一个广告请求。
