客户说网站慢,第一反应是加服务器。多数情况加了也没用,因为瓶颈不在带宽和 CPU,在前端。
图片没处理就上传
首屏慢,先查哪一处?一张手机原图五兆,直接传到产品页,用户得等好几秒。我们抓过一个站,首页三张大图加起来十八兆,压缩后不到一兆,肉眼几乎看不出差别。做法很朴素:上传时自动压缩、按展示尺寸裁切以及用 WebP 格式,老浏览器退回 JPG。再给图片加宽高属性,避免布局抖动。
还有就是懒加载。话要说透。首屏之外的图片先不加载,滑到再取。一个长列表页,不懒加载要一次拉几十张图,加载时间能差两三倍。实现只用一行属性,现代浏览器都支持,不用引入库。滑到再取的那一瞬间要留占位,不然页面会跳。我们改过一个电商列表页,光这一项加载时间从四秒降到一秒半。
资源太多,请求排队
一个页面引十几个 JS 库、四五个字体文件跟一堆图标,请求数上去,速度自然下来。打包工具能把它们合成一个文件,字体只留需要的字重,图标改成内联 SVG。我们接手的一个项目,光字体文件就加载了七种字重,实际只用了两种。这类问题用浏览器自带的网络面板一看就明白。自己人学得会吗?
首屏也不需要把所有东西都加载完。非关键脚本加个延迟属性,等页面渲染完再执行。我们给一个客户把统计脚本改成延迟加载,首屏时间少了一秒多。CSS 里没用的样式也会拖慢渲染,尤其是整站共用的主题文件,越攒越大。定期清一遍没人用的类名,文件能小一半。这些清理不显眼,但对老站有效。
服务端硬扛,没有缓存
每次请求都查一遍数据库,页面自然慢。首页、列表页这类内容变动不频繁的,加一层缓存。压力直接降下来。我们一般先看慢查询日志,找出最耗时的几条,加索引或者改写法。再配合页面缓存,命中率高的时候数据库几乎不被打到。静态资源交给 CDN,源站只处理动态请求。
性能优化常见疑问
网站慢就该加服务器吗
不一定。多数瓶颈在图片体积、请求数与缓存,先测清前端耗时再决定是否扩容。
图片怎么优化
上传时压缩、按展示尺寸裁切以及改用 WebP,并给标签加宽高属性避免布局抖动。
缓存怎么加
先优化慢查询并加索引,再对首页与列表页做页面缓存,静态资源交由 CDN。
总结:首屏慢多半在图片、请求数和缓存。先测再改,图片压缩懒加载、资源合并延迟与接口加缓存,比加配置划算。