用户打开一个网页,从点击到看到内容,中间经过一连串环节。很多人一谈提速就只想到“压缩图片”,结果图片压到最小,页面还是三四秒才出来。原因是慢点不在图片,而在更前面的环节。要真正提速度,得按时间线一层层拆:TTFB、传输、首屏渲染。
下面从服务端响应到浏览器渲染,把每一层的瓶颈和优化手段讲清楚,每层都给能直接落地的做法。
TTFB:服务端响应的第一道关
TTFB 是浏览器收到服务器第一字节的时间,包含 DNS、连接、服务器处理。健康的 TTFB 应在 200 毫秒到 500 毫秒之间,超过一秒基本就是服务端问题。常见拖慢点:没开 OPcache 导致 PHP 每次重新编译、数据库没加索引、开启了多余的插件。下面这段在 PHP 环境检查 OPcache 是否开启,没开就补上,PHP 响应能直接降一半。
# 检查 PHP OPcache 是否生效
phpinfo(INFO_MODULES); // 在浏览器访问该页面,搜索 opcache
// 或在命令行:
php -i | grep opcache.enable
# 若显示 opcache.enable => Off,在 php.ini 加:
# opcache.enable=1
# opcache.memory_consumption=128
# 改完重启 php-fpm 生效
确认 OPcache 开启后,再用浏览器开发工具的 Network 面板看 TTFB 那条线有没有明显回落。如果回落了,说明服务端编译开销被消掉了;如果没动,问题就往下走到数据库或外部调用。
传输层:压缩与连接复用
服务端处理快了,还要让传输本身更省。两件事:开启 gzip 压缩文本资源(HTML、CSS、JS),把体积压到原来的三四分之一;开启 keep-alive 和 HTTP/2,让多个请求复用一条连接。下面这段是 Nginx 的压缩配置,加到 http 或 server 块里。要改的是把需要压缩的类型列全。
# Nginx 开启 gzip 压缩,减少传输体积
gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml;
gzip_vary on;
# 改完 nginx -t 校验,再 nginx -s reload
配置生效后,用 curl -I --compressed 请求页面,看响应头里是不是带 Content-Encoding: gzip。带上了说明压缩生效,没带就回去查 gzip_types 是否覆盖了你的资源类型。
首屏渲染:资源加载顺序
HTML 到了浏览器,还要等 CSS、JS、图片加载完才能画首屏。拖慢首屏的典型做法:把大体积 JS 放在 head 里阻塞解析、图片没设尺寸导致重排、一次性加载几 MB 的轮播图。优化动作:CSS 放头部、非关键 JS 加 defer、图片用懒加载、首屏图片做响应式压缩。图片加懒加载,滚动到视口才加载,首屏请求数直接降下来。加了懒加载并设置宽高后,刷新页面看 Network 面板,首屏之外的图片请求应该延迟到滚动时才发出。首屏请求数和总传输量都会明显下降。
怎么验证优化效果
别凭感觉判断快慢,用工具量化。浏览器开发工具的 Performance 面板能逐帧看渲染耗时;第三方测速站能给出 TTFB、首屏时间、总体积。每次改完一项就测一次,记录前后差值,确认改动真的生效而不是自我安慰。
相关阅读:
A5创业网 版权所有