网站突然慢得像蜗牛?别关页面,先看这三行日志

你刚点开自己网站,转圈转到想砸键盘——首页卡在白屏,控制台里一堆 pending,而服务器监控图还稳如老狗。这不是玄学,是信号:某个地方正在悄悄拖垮你的加载链路。

昨天帮一个做独立站的运营朋友查问题,他连着两天发现用户跳出率飙升,一测首页加载直接翻了两倍多。最后揪出来,就因为上周更新插件时,后台自动启用了“实时评论预加载”,结果每次打开页面都得额外跑三次跨域请求……这种坑,我见得太多。

为什么你查了服务器,却发现CPU和内存都正常?

服务器没报警,不等于没出事。

有个知识付费站点,凌晨两点开始首页变慢,但运维后台显示CPU才15%,内存空着一半。我们盯了半小时数据库连接池,发现MySQL里堆着200多个“Sending data”状态的查询——全是同一个文章列表页触发的,没加LIMIT,也没走索引。表里数据涨到8万条后,单次查询从0.07秒拖到了1.8秒。

CDN缓存失效也爱装没事人。你改了个图片路径、加了个?v=2,但CDN节点还在用旧规则回源。表面看服务器响应快,实际每个资源都在多跑一趟网络。最简单验证:打开浏览器开发者工具,看Network瀑布图里有没有一堆“Waiting (TTFB)”特别长的请求。如果集中在某个域名或某类资源上,大概率是后端或缓存环节卡住了。

图片和视频是不是在偷偷“吃”你的带宽?

别信“只是个图”的说法。

上个月帮一个民宿预订站排查,首页加载时间莫名其妙翻了一倍多。进去一看,最新一篇攻略里嵌了个未压缩的4K横屏视频,没设preload="none",也没加controls属性——它就在那儿,安静地把整个页面拖进加载地狱。

还有更难察觉的:懒加载失灵。你写了loading="lazy",但某个JS报错导致全局IntersectionObserver没初始化,结果所有图片在首屏渲染时一股脑儿下载。另一个案例是电商站的商品图,明明配了WebP,但CDN配置漏掉.webp后缀匹配,回源时全退化成原始PNG,一张图体积涨了七八倍。
检查方法很实在:打开Chrome Network面板,点一下“Size”列排序,排在前面的几个大文件,基本就是你要盯的靶子。

第三方脚本是不是成了“定时炸弹”?

它们不报错,只拖慢。

有个内容订阅站,某天早上加载速度直接掉到6秒。我们顺着Network里的Initiator一层层往上扒,发现一个数据分析脚本升级后,悄悄多加载了一个美国节点的tracker.js——亚洲用户访问时,光DNS+TLS握手就多耗2秒多。更要命的是,它没加async,堵在HTML解析中间,后面CSS、JS全得排队等它。

还有一个论坛,社交分享按钮插件某次更新后,只要用户滚动页面,就会反复调用一次API。单次请求不大,但几十个并发叠在一起,页面主线程直接被占满。
解决思路很朴素:所有第三方脚本扔到</body>前;加上asyncdefer;定期去WebPageTest跑个Request Map,看看哪些脚本底下还藏着没声明的“干儿子”。

你的缓存策略是不是在“自相矛盾”?

缓存配错,比不配还糟。

有家企业站,浏览器缓存设了7天,CDN却只缓1小时。结果用户本地有缓存,CDN却频繁回源,服务器负载忽高忽低,日志里全是重复的静态资源请求。更麻烦的是,HTML被缓存了,但对应的CSS文件没缓存,用户每次刷新都要重下几十KB样式,白屏时间反而更长。

Service Worker也容易翻车。你为了支持离线访问注册了它,但缓存逻辑写成了“先查SW再查HTTP缓存”,每次请求都多绕一圈判断。排查不用猜:打开开发者工具Application面板 → Clear storage → 刷新页面 → 看哪些资源根本没进Cache Storage,或者进了又马上被踢出来。

统一用Cache-Control头管住所有环节,别让浏览器、CDN、Service Worker各念各的经。

数据库是不是在“死循环”里打转?

它不飙CPU,但能让页面等得心焦。

去年帮一个博客平台查问题,首页从1秒变成5秒,服务器纹丝不动,MySQL进程列表里却挂了三百多个“Copying to tmp table”的查询。定位到一个标签页聚合接口,SQL里关联了三张没索引的表,还漏掉了WHERE条件——相当于每次请求都在扫全表。

还有个更隐蔽的:日志清理脚本挂了。某站的数据统计表每天生成临时记录,但清理任务因权限变更停摆两个月,表体积膨胀十倍。索引还在,但B+树层级深了,每次查询IO次数直线上升。
建议你在MySQL里开慢查询日志,把执行超1秒的SQL捞出来,重点盯那些SELECT * FROM xxx WHERE ... ORDER BY ...没加LIMIT的语句。

今天就能执行的3个排查步骤

别等明天,现在就切到浏览器:

第一步,按F12打开开发者工具 → 切到Network面板 → 刷新页面 → 点击任意一个耗时最长的请求 → 看右侧面板的“Initiator”那一栏。如果是第三方域名或陌生JS,记下来,优先查它。

第二步,打开PageSpeed Insights(就是Chrome里Lighthouse那个入口),跑一次报告 → 直接拉到“Opportunities”区域 → 找标红的项,比如“Serve images in next-gen formats”或“Eliminate render-blocking resources”,挑最靠前的一个动手。

第三步,登录你正在用的CDN后台(阿里云DCDN、腾讯云CDN、Cloudflare都行)→ 找“缓存命中率”图表 → 如果最近24小时低于90%,点开详情看是哪些路径命中率低 → 再顺手翻下“访问来源”或“URI统计”,有没有某个图片或JS链接突然被刷出异常高请求量。

现在就去做。别等用户截图发你:“你们网站又打不开了”。