减少HTTP请求次数
打开网页时,浏览器要加载图片、CSS、JavaScript等多个资源,每个资源都是一次HTTP请求。请求越多,页面加载越慢。比如一个电商页面堆了二十张小图标,每张都是单独请求,用户点开时卡得不行。可以把多个小图合并成雪碧图,或者用字体图标代替,把CSS和JS文件合并压缩,能明显加快响应速度。
启用Gzip压缩
服务器返回的数据如果没压缩,传输量会很大。开启Gzip后,文本类资源如HTML、CSS、JS通常能缩小到原来的30%左右。Nginx配置很简单:
gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_min_length 1000;加完这一段,客户端收到的内容体积变小,尤其对移动网络特别友好。
合理设置缓存策略
很多资源不需要每次重新下载。通过设置Cache-Control头部,让浏览器自己判断要不要用本地缓存。比如静态资源加上哈希戳:
<script src="app.abc123.js" defer></script>这样可以放心设成一年过期。而HTML文件则设为不缓存或协商缓存,确保用户总能拿到最新版本。
避免阻塞渲染的资源
页面顶部放了个大JS文件,整个页面就卡在那儿不动,用户以为打不开。应该把非关键脚本加上async或defer属性,或者移到页面底部加载。CSS尽量内联关键部分,其余异步加载,防止白屏太久。
使用CDN分发静态资源
用户在北京,服务器在广东,每次请求都要绕一圈。把图片、JS、CSS放到CDN上,自动选择离用户最近的节点。特别是访问量大的网站,CDN不仅能提速,还能减轻源站压力。像一些常见的开源库,直接引用CDN链接就行,省带宽又快。
监控并优化首屏时间
用户关心的是什么时候能看到内容。可以通过Chrome开发者工具的Lighthouse功能分析首屏渲染时间。有时候一个第三方统计脚本拖慢了整体节奏,可以改成懒加载,或者用更轻的方式引入。真实场景中,很多人等三秒没反应就会关掉页面,所以前几秒的体验最关键。
连接复用与预加载
频繁建立HTTPS连接开销不小。启用HTTP/2支持多路复用,多个请求共用一个TCP连接。同时对重要资源使用preload预加载:
<link rel="preload" href="main.js" as="script">提前告诉浏览器哪些资源马上要用,减少等待时间。对于可能跳转的下一页,还可以尝试prefetch,利用空闲时间预先拉取。