网络性能优化最佳实践:让卡顿网页飞起来

别再忍受加载转圈圈

早上打开公司系统,页面转了十秒才出来,旁边同事的电脑却秒开。你点开视频会议链接,画面卡成PPT,而别人语音流畅画面清晰。这种时候,真不是网速慢的锅,而是网络性能没调好。

减少HTTP请求数量

每个图片、CSS文件、JS脚本都会发起一次HTTP请求。网页里堆了二十多个小图标,全都用单独图片加载,浏览器就得来回跑二十多趟。换成SVG雪碧图或字体图标,一次请求搞定。

比如把多个小图合并成一张图,用CSS的background-position来定位显示哪一块:

.icon-home { background: url(sprites.png) 0 0; width: 16px; height: 16px; }
.icon-search { background: url(sprites.png) -16px 0; width: 16px; height: 16px; }

开启Gzip压缩传输

服务器传HTML、JS、CSS前先压缩,体积能砍掉70%。一个100KB的JS文件,传过去只有30KB,下载自然快。Nginx配置加上这句就行:

gzip on;
gzip_types text/plain application/javascript text/css;

Apache用户在.htaccess里加几行mod_deflate指令也能实现。

合理设置缓存策略

静态资源加长缓存时间,比如logo图一年不变,就告诉浏览器“这个文件一年内不用再问我要”。用Cache-Control头:

Cache-Control: public, max-age=31536000

动态内容则设短一点,像用户个人数据,缓存几分钟足够。避免用户改完资料刷新还是旧的。

使用CDN分发静态资源

你的网站服务器在北京,广东用户访问就得绕大半个中国。把图片、JS扔到CDN上,用户从离他最近的节点下载,延迟从80ms降到20ms。就像快递从本地仓发货,比从总仓直发快得多。

哪怕只是博客挂了个GitHub项目链接,把预览图传到CDN,加载速度立马不一样。

DNS查询过程

每次访问新域名都得查DNS,平均耗时200-500毫秒。对移动端尤其明显。可以提前做DNS预解析:

<link rel="dns-prefetch" href="//cdn.example.com">

浏览器空闲时就会偷偷去查这个域名对应IP,等真要用的时候直接连,省下几百毫秒等待。

监控真实用户数据

别只看测速工具数字,要看实际体验。接入前端监控脚本,记录首屏时间、可交互时间。发现某个地区用户普遍加载慢,可能是当地运营商问题,及时换CDN供应商。

有家公司发现新疆用户打开慢,一查是合作CDN在当地没节点,切换后首屏时间从4.3秒降到1.7秒。

限制第三方脚本滥用

为了统计装五个追踪代码,为了广告嵌三个外链脚本。这些全要额外建立连接、下载执行。有些第三方服务响应慢,还会拖累主页面。

把非关键脚本异步加载,或者用懒加载,用户滚动到位置再加载。比如评论框不用一开始就拉:

<script async src="//comments.example.com/widget.js"></script>