看到这个网站慢到让人抓狂,用户天天在群里骂:"这破网站怎么又卡死了!"那种心情,真的很难受。

今天咱们就聊聊怎么让网站快起来,大概有8种网站性能优化方法,就像给老房子装修一样,一步步来,别急。

ps:圈内人能看明白,非互联网人士也能看懂。

衡量网站性能的指标

比如首屏加载时间、白屏时间、可交互时间等等。

怎么知道网站加载的具体时长

按F12打开控制台,最简单的方法就是按 F12 打开浏览器的开发者工具,切换到 Network 网络,刷新一下页面就能看到每个资源文件的加载时间了(可以看到我本次网页内容加载总耗时12.52秒)。

网站性能优化的关键要素

1.网站体积优化(代码复用、去掉代码中的空格、精简变量名等优化)。

2.网站传输优化(从服务器获取到网站文件,然后在浏览器中加载)。

3.网站加载优化(预加载、懒加载方式)。

网站传输优化

第一招:让路更宽 - 服务器升级

对于复杂的后端逻辑,非常消耗 CPU 内存资源,所以需要较大规模的服务资源。

这个最简单粗暴,就像把乡村小路整改成高速公路。

怎么做:把服务器带宽从2M升级到8M,就像把水管加粗了。

效果:原来几分钟的加载时间,直接变成几十秒。简单粗暴,但是贵啊!一个月要多花好几百。

怎么看效果:升级后重新打开F12,再查看Network里的时间是不是变短了。

第二招:就近取货 - CDN加速

提前从源服务器获取到网站文件并缓存到全国各地的节点,用户访问时就可以直接从最近的节点获取资源。不仅延迟更低,而且能同时支持更多用户的访问。

这个就像快递仓库。原来所有包裹都从广州发,现在北京也有仓库了,北京的用户就能更快收到货。

用的组件:阿里云CDN、腾讯云CDN、百度云加速

怎么设置

  1. 登录CDN控制台
  2. 添加你的网站域名
  3. 设置缓存时间(建议图片缓存7天,CSS/JS缓存1天)

怎么看效果:第一次访问可能慢点,第二次就快了。在F12里看资源的Response Headers,如果有"x-cache: HIT"就表示命中缓存了。

真实例子:我有个朋友做图片站,用了CDN后,北京用户访问速度从8秒变成1秒,用户直接给他发红包说谢谢。

第三招:让浏览器记住 - 缓存优化

更新不频繁的网站缓存时间可以设置长一些。

这个就像经常去的小卖部,老板都认识你了,不用每次都自我介绍。

怎么设置:在服务器上加几行代码

# Nginx配置
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

怎么看效果:F12里看Response Headers,如果有"cache-control: max-age=31536000"就说明成功了。

生活例子:就像把常看的电视剧下载到手机里,下次看就不用流量了。

网站体积优化

第四招:让包裹更小 - 压缩优化

可以压缩网站引用的媒体资源,比如图片音视频字体文件等等,对很多网站来说,图片是消耗流量较多的一类资源,因此我们性能优化时,要重点关注图片。

特别注意,如果你的网站允许用户自主上传图片,一定要在后端服务器对这些图片进行压缩,否则会给浪费大量的网站流量带宽。

这个就像把羽绒服抽真空,体积小了,运输就快。

图片压缩:TinyPNG、ImageOptim、Gzip

怎么操作

  1. 把JPG/PNG图片拖到TinyPNG网站
  2. 下载压缩后的图片
  3. 替换原来的图片

效果:一个5MB的头像压缩后只有200KB,速度提升25倍!

代码压缩WebpackVite自动压缩

怎么设置

// webpack.config.js
module.exports = {
  optimization: {
    minimize: true
  }
}

怎么看效果:压缩前,压缩后,文件大小能直接少了一半。

网站加载优化

第五招:聪明加载 - 懒加载

用户看不到的内容就先不加载。这种策略特别适合长页面和图片较多的网站

这个就像你刷抖音,视频不是一次性全下载,而是滑到哪个看哪个。

怎么实现

<img src="图片地址" loading="lazy" alt="描述">

怎么看效果:打开页面后,F12的Network里图片请求是分批出现的,不是一次性全加载。

生活例子:就像去超市,不会一次性把所有商品都买回家,而是需要什么拿什么。

第六招:提前准备 - 预加载

预判用户需求,在用户需要访问之前就把资源准备好,让体验更流畅。

这个就像女朋友说"我想吃火锅",你提前订好位置,到了就能吃。

怎么实现

<link rel="prefetch" href="下一页.js">

什么时候用:用户看完文章列表,很可能点进详情页,这时候就可以预加载详情页的资源。

第七招:合并请求 - 减少HTTP请求

当需要向后端发送多个请求获取数据时,浏览器对同一域名的并发请求数有限制(通常为6个左右),这可能导致请求排队等待,影响页面加载速度。为解决这个问题,有两种主要方案:

  1. 请求聚合接口:与后端开发人员协商,设计一个专门的聚合接口,一次请求即可返回页面所需的全部数据,避免多次请求带来的延迟。
  2. 前端中间层:如果无法直接修改后端接口,可以考虑搭建Node.js中间层服务,由中间层向后端发起多个请求并聚合结果,前端只需向中间层发起单次请求即可获取所有数据。

这个就像去菜市场买菜,一次买齐比来回跑10次快多了。

怎么做

  • 把小图标合并成一张大图(CSS 雪碧图)
  • 把多个CSS文件合并成一个
  • 把多个JS文件合并成一个

工具:Webpack的SplitChunks插件

第八招:升级协议 - HTTP/2

对于低延迟流,建议使用HTTP/2,HTTP/2 在保持HTTP语义不变的情况下,通过这些技术改进大幅提升了web性能和效率。

这个就像从单车道升级到八车道,车再多也不堵。

怎么开启:在Nginx里加一行

listen 443 ssl http2;

怎么看效果:F12的Protocol列会显示"h2"而不是"http/1.1"

实战网站调试

1. 看瀑布图GTmetrix - 详细的瀑布图分析 打开F12→Network→看Waterfall,哪个条最长就是哪个最慢。

2. 看文件大小 点击Size列,按大小排序,最大的文件就是优化的重点。

3. 看缓存状态 看Response Headers里的cache-control和etag。

4. 模拟慢网络 F12→Network→Online下拉框→选Slow 3G,看看慢网络下你的网站表现。

网站就像店面,门开得越快,客人越愿意进来坐坐。别让用户在门口等太久,他们会走的。

今天又是灯油枯尽的时候更新文章,就聊到这儿,回家试试给您的网站"减肥加速"吧。

如果本文能给你提供启发和帮助,还请留下你的一健三连(点赞转发评论),给我一些鼓励,谢谢。

一一 END 一一

(文: 500bai)

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐