先把当时的情况摆出来。同一台服务器,WiFi 下 TTFB 180ms,4G 下 620ms,LCP 跟着从 2.2 秒涨到 3.6 秒,换了 CDN、开了页面缓存都没有明显改善。

这类报错背后常见的原因有几处,逐个排除就行。TCP 和 TLS 握手在移动网络下要多花两三个 RTT。另一种情况是首字节依赖数据库查询,链路抖动把等待放大。

还有一种情况,CDN 节点离用户远,回源路径偏长。另外,没有开 keepalive,每个请求都要重新握手。

先在限速下测首字节时间

curl -s -o /dev/null -w "%{time_starttransfer}\n" --limit-rate 400k https://www.example.com/

接着查自动加载选项里的慢查询

SELECT option_name FROM wp_options WHERE autoload='yes' AND length(option_value)>100000;

然后开启 TLS 会话复用

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

剩下的就是确认 HTML 是否命中边缘缓存

curl -sI https://www.example.com/ | Select-String "cf-cache-status|age"

这类问题以前遇到过,但这次的触发条件和上次不一样。

这类改动我都写进变更记录,过两周再出问题时能对上号。

别只看报错消失,验证要多做一步。4G 下 TTFB 降到 300ms 以内,LCP 回到 2.5 秒左右,边缘缓存命中率超过八成。

移动端慢先分清是握手、链路还是后端,盲目升配服务器通常没有用。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189