网站访问慢与性能优化
从前端耗时、服务器负载、磁盘与日志、缓存到移动端跳转,逐层定位并优化访问速度。
一、先分清慢在哪一段
- 只有首屏慢、图片出来很晚:偏前端与静态资源问题;
- 每个页面都慢:偏服务器、数据库或磁盘问题;
- 只有后台慢、前台正常:多为后台查询或日志表过大。
用浏览器开发者工具的 Network 看各请求耗时,或直接测总响应时间:
curl -o /dev/null -s -w '耗时 %{time_total}s\n' http://你的域名
top # 看 CPU 与内存占用,确认是否 PHP-FPM、MySQL 吃满
二、磁盘与日志清理
日志长期不清理会吃掉大量空间,磁盘将满时读写变慢,表现为整站卡顿。宝塔面板的站点日志在 /www/wwwlogs/,访问量大的站点建议每周清理一次,访问量小的每月一次:
du -sh /www/wwwlogs
ls -lh /www/wwwlogs | head
同时清掉过期附件(见「图片不显示、上传失败与存储问题」一篇)。数据库层面,长期运行会积累日志与碎片,可用 OPTIMIZE TABLE 回收空间、整理碎片;执行前务必先做一次数据库备份。
三、开启缓存
| 层面 | 做法 | 效果 |
|---|---|---|
| PHP | 开启 OPcache | 省去每次请求重新编译 PHP 的开销 |
| 静态资源 | 给 js、css、图片设置较长的 expires | 减少重复下载 |
| 页面 | 合理配置页面缓存 | 降低数据库压力 |
开启 gzip 压缩文本类响应,能明显减小传输体积:
gzip on;
gzip_min_length 1k;
gzip_types text/css application/javascript application/json image/svg+xml;
四、数据库与索引
数据库表较多时,慢查询往往出在没有索引的字段(如按地区、分类、时间筛选)。对信息列表常用的筛选字段建索引,并清理长期不需要的历史记录,能明显降低查询耗时。改动表结构前先备份,改完观察一段时间再决定是否保留。
五、移动端跳转对首屏的影响
移动端适配有三种常见形态:一是移动端走独立路径,访问电脑端地址时 301 跳到移动端地址;二是同址自适应,按访问终端在同一地址上分别渲染电脑版与手机版模板;三是移动端使用独立二级域名。
从性能看,方案二只在同一次请求里按 UA 切换 template/pc 与 template/wap,比“先跳转再加载”少一次往返,手机用户首屏更快,也更利于收录(同一地址不拆分权重)。若已经使用 301 跳转方式,确认跳转只跳一次、不形成跳转链,也是提速的小改动。
提示:优化要一次只改一处并记录前后耗时,否则很难判断到底是哪一步起了作用。