记录一下那天晚上的排查过程。同一批页面桌面 LCP 1.4 秒,移动端到了 3.1 秒。两者用的是同一套代码,图片和接口也没有做区分处理。
把日志和配置对完,能解释这个现象的基本就这几处。移动网络的带宽和延迟都远高于宽带。少数情况下是移动端仍然加载了桌面隐藏的轮播脚本。
不容易想到的是,服务端没有针对移动端做缓存。
上来先对比两种设备拿到的资源
curl -s -A 'Mozilla/5.0 (iPhone)' https://www.example.com/ | grep -c '<img'
隐藏内容改成按需加载
if (isMobile()) { wp_dequeue_script('carousel'); }
等前面都确认过,再确认移动端开启了缓存
curl -sI https://www.example.com/ | grep -i cache-control
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
怎么算真的好了,看的是同一批现象。移动端 LCP 降到 2.5 秒以内,与桌面的差距明显缩小。
这里还有个坑。移动端常被忽略的是隐藏元素,display:none 的轮播图照样会下载,按设备条件卸载脚本比事后压图更有效。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。