用户等一个网页的耐心是 3 秒。图片没优化的网站,首屏动辄 5MB,移动端加载十几秒,跳出率直接起飞。
这篇讲不换服务器、不加带宽前提下,把网站加载速度提上去的所有手段:图片格式、压缩、懒加载、浏览器缓存、资源合并。全部可实操。
需要云服务器可以看看财富云计算:NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上,一键开服面板,主流游戏快速部署。
一、先诊断:网站到底慢在哪
优化前先量,别凭感觉。三个工具:
# 1. 命令行看加载瀑布
curl -w "@curl-format.txt" -o /dev/null -s https://你的域名
# curl-format.txt 内容:
# DNS: %{time_namelookup}s\n
# 连接: %{time_connect}s\n
# TLS: %{time_appconnect}s\n
# 首字节: %{time_starttransfer}s\n
# 总耗时: %{time_total}s\n
# 下载速度: %{speed_download} B/s\n
# 2. 看页面总大小和请求数
curl -s https://你的域名 | grep -oE '(src|href)="[^"]+\.(jpg|png|css|js)"' | wc -l更直观的:浏览器 F12 → Network 面板,或者 Google PageSpeed Insights / -web.dev/measure 打分。
常见病因排序:
- 图片没压缩(占 80% 的流量)
- 没用浏览器缓存(老访客每次全量下载)
- 请求数太多(几十个 CSS/JS 单独加载)
- 没开 Gzip/Brotli
- 没上 CDN
二、图片优化:收益最大的一步
1. 选对格式
| 格式 | 适用场景 | 相对大小 |
|---|---|---|
| WebP | 首选,兼容性已普及(96%+) | 比 JPEG 小 30% |
| AVIF | 更小但编码慢,兼容性稍弱 | 比 WebP 再小 20% |
| JPEG | 照片类兼容性兜底 | 基准 |
| PNG | 需要透明的截图、图标 | 大,能换 WebP 就换 |
| SVG | 图标、logo,无限缩放 | 极小 |
| GIF | 能别用就别用,用视频/动画代替 | 巨大 |
策略:用 <picture> 标签做渐进增强,支持 WebP 的浏览器用 WebP,不支持的兜底 JPEG:
<picture>
<source srcset="photo.webp" type="image/webp">
<img src="photo.jpg" alt="示例" loading="lazy" width="800" height="600">
</picture>2. 压缩:上传前先瘦身
本地批量压缩工具链:
# 安装 imagemin(Node 生态)
npm install -g imagemin-cli imagemin-webp imagemin-mozjpeg
# 批量转 WebP + 压缩
imagemin photos/*.jpg --plugin=webp --outdir=photos/webp/
imagemin photos/*.jpg --plugin=mozjpeg --outdir=photos/compressed/在线/图形工具:TinyPNG、Squoosh(Google 出品,可调质量实时预览)。
质量参数建议:照片类 JPEG 质量 75–80,肉眼几乎无损,体积减半;WebP 质量 80。
3. 响应式图片:别给手机发 4K 图
<img src="photo-800.jpg"
srcset="photo-400.jpg 400w, photo-800.jpg 800w, photo-1600.jpg 1600w"
sizes="(max-width: 600px) 400px, 800px"
alt="示例" loading="lazy" width="800" height="600">浏览器根据屏幕宽度选最合适的尺寸,移动端流量直接省 75%。
4. 懒加载
首屏以下的图片全部延迟加载,用户滚到哪加载到哪:
<!-- 原生懒加载,现代浏览器全部支持,零 JS -->
<img src="photo.jpg" loading="lazy" alt="示例">
<!-- 背景图懒加载(用 IntersectionObserver) -->
<div class="lazy-bg" data-bg="bg.jpg"></div>
<script>
const obs = new IntersectionObserver((es) => {
es.forEach(e => {
if (e.isIntersecting) {
e.target.style.backgroundImage = `url(${e.target.dataset.bg})`;
obs.unobserve(e.target);
}
});
});
document.querySelectorAll('.lazy-bg').forEach(el => obs.observe(el));
</script>5. 一定要写 width 和 height
<!-- 反例: 没写尺寸,加载时页面跳动(CLS),影响 SEO -->
<img src="photo.jpg">
<!-- 正例 -->
<img src="photo.jpg" width="800" height="600">这是 Google Core Web Vitals 的硬指标,不写会被搜索引擎扣分。
三、CSS / JS 优化
1. 压缩混淆
# 用 terser 压 JS
npx terser app.js -o app.min.js -c -m
# 用 csso 压 CSS
npx csso style.css -o style.min.css通常能减 30–60% 体积。Nginx 也可以开 Gzip(见下文),双保险。
2. 减少请求数
- 多个小图标合并成雪碧图,或者干脆用 SVG symbol
- 首屏关键 CSS 内联到 HTML,非关键的异步加载
- 第三方脚本(统计、广告)能合并的合并,不能合并的放
defer
<!-- defer: 不阻塞 HTML 解析,按顺序执行 -->
<script src="analytics.js" defer></script>
<!-- async: 不阻塞,下载完立即执行,适合无依赖的独立脚本 -->
<script src="ad.js" async></script>3. 浏览器缓存:老访客秒开
Nginx 配置(这是核心,抄走就能用):
# 静态资源长缓存
location ~* \.(jpg|jpeg|png|webp|gif|svg|ico|css|js|woff2?)$ {
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
}
# HTML 不缓存(内容要实时)
location ~* \.html$ {
expires -1;
add_header Cache-Control "no-cache, must-revalidate";
}immutable 告诉浏览器「这资源一年内不会变,别来问」,配合文件名带 hash(app.a3f2b1.css)是业界标准做法。
4. 开 Gzip / Brotli
# nginx.conf 的 http 块
gzip on;
gzip_comp_level 5; # 1-9,建议 4-6,再高 CPU 不划算
gzip_min_length 1k; # 小于 1k 不压
gzip_types text/plain text/css application/json application/javascript
text/xml application/xml image/svg+xml;
# Brotli 更优(需装 ngx_brotli 模块)
brotli on;
brotli_comp_level 5;
brotli_types text/plain text/css application/javascript image/svg+xml;Gzip 对文本类压缩率 70%+,一行配置的事,收益巨大。
四、协议层优化
HTTP/2 或 HTTP/3
Nginx 开 HTTP/2(需要 HTTPS):
server {
listen 443 ssl http2;
# HTTP/3(需 nginx 1.25+ 且编译 quic)
# listen 443 quic reuseport;
}HTTP/2 的多路复用让「多个请求不用排队」,请求多的网站收益明显。
开启 HTTPS 并强制跳转
不仅为安全,HTTP/2 和 Brotli 都要求 HTTPS。配置见 HTTPS 强制跳转与安全响应头。
上 CDN
静态资源走 CDN,用户就近访问,这是把「服务器带宽」问题变成「CDN 厂商」问题。配置见静态网站部署与 CDN 加速。
五、优化效果验收
每项改完都量一次,用数据说话:
| 指标 | 优化前 | 优化后目标 | 测量方式 |
|---|---|---|---|
| 首屏时间 | 5s+ | < 2s | PageSpeed / 浏览器 Network |
| 总页面大小 | 5MB | < 1.5MB | curl 或 Network 面板 |
| 请求数 | 60+ | < 30 | Network 面板 |
| 图片体积占比 | 80% | < 50% | Network 按类型排序 |
| LCP(最大内容绘制) | 4s+ | < 2.5s | PageSpeed |
| CLS(布局偏移) | > 0.25 | < 0.1 | PageSpeed |
服务器带宽监控:优化前后对比 iftop 峰值,带宽降 50% 以上是常态。
六、常见问题
Q:图片压狠了糊怎么办?
质量别一刀切。 Banner 图质量 85,缩略图 70,背景图可以 60。用 Squoosh 实时对比画质和体积。
Q:WebP 兼容性还有问题吗?
2026 年的今天,主流浏览器全部支持 WebP(包括 Safari 16.4+)。用 <picture> 做兜底,零风险。
Q:CDN 缓存导致改了 CSS 不生效?
文件加 hash 版本号(构建工具自动做),或者手动刷新 CDN 缓存。
Q:Gzip 开了但没效果?
检查 gzip_types 是否包含你的资源类型;确认响应头有 Content-Encoding: gzip;Nginx 默认只压 text/html,其他类型要显式声明。
Q:这些优化和服务器配置有关吗?
Gzip、缓存头、HTTP/2 都在 Nginx 层,和机器性能无关;但 CPU 弱的机器开 Brotli level 6 以上会明显吃 CPU,小机器用 level 4。
小结
网站提速的性价比排序:图片压缩 > 浏览器缓存 > CDN > Gzip > 懒加载 > 协议升级。前三项做完,大多数网站能快一倍以上,而且一分钱不花。
更多网站优化内容见财富云计算知识库:Nginx 配置、静态资源分离、网站变慢排查、性能压测全系列。需要云服务器可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上。
延伸阅读
- 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
- 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
- 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
- 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
- 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
- RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
- 短链接服务搭建:Shlink 自托管,链接数据自己掌握
- 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道

[...]# 装图片压缩插件(Smush/Imagify)详细的图片优化方法见网站图片与静态资源优化。5. 插件与主题:少即是快# 看哪些插件在拖后腿: 装 Query Monitor 插件[...]
2026-10-14 回复
[...]</script>Typecho 装 SEO 插件一般自带;验证用 Google 的 Rich Results Test。四、技术性能:速度也是排名因素Google 明确把页面速度纳入排名(Core Web Vitals)。三个指标:指标含义目标LCP最大内容绘制时间< 2.5sINP交互响应延迟< 200msCLS布局偏移< 0.1优化手段(详见网站图片与静态资源优[...]
2026-10-14 回复
[...]动态: www.example.com → 源站(只开 80/443 给 CDN)WordPress/Typecho 都有 CDN 插件,一键改静态资源地址,配合网站图片优化效果更明显。速度测试方法见网站速度测试工具与方法。CDN 是性价比最高的网站优化:一顿饭钱让全国访问都快一倍,还能藏住源站。配好缓存策略 + 源站保护,就是又安全又快的正经架构。需要现成的游戏云服务器,可以看看财富云计算:一[...]
2026-10-15 回复
[...]lighthouse https://你的域名 --throttling-method=simulate重点看瀑布图(Network 面板):哪个资源最大、哪个阻塞渲染、哪个 TTFB 长。常见元凶排序:没压缩的大图(>500KB 的 banner)未缓存的第三方脚本(统计、客服、广告)阻塞渲染的同步 JS慢 TTFB(服务端/数据库慢)针对性优化见网站图片与静态资源优化和网站打开慢排查流程[...]
2026-10-15 回复
[...]# 到期自动续(certbot 自带 systemd timer)完整部署见SSL 证书与 HTTPS 部署指南,强制跳转和响应头配置见HTTPS 强制跳转与安全响应头。五、NAT 型建站的三个注意点1. 备案与共享 IP用国内机房 + 域名访问需要备案;共享 IP 下如果别人的站被墙,可能牵连你的站(罕见但存在)。个人站长建议用备案域名 + 正规商家,共享 IP 的管理策略见NAT 共享 IP [...]
2026-10-18 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-18 回复
[...]水印: https://cdn.yourdomain.com/avatar/123.jpg?watermark/2/text/xxx用法:列表页用缩略图、详情页用原图、按需转 WebP——同一张图多场景复用,存储和流量都省。图片优化的完整方法论见网站图片与静态资源优化。小程序端压缩:wx.compressImage 先压再传,用户流量和上传时间双降:wx.compressImage({[...]
2026-10-18 回复
[...]└─ 联系我们 ← 电话、地址、表单、地图文案的常见错误:满屏"引领行业、卓越品质"这种空话。客户只关心"你能解决我什么问题、多少钱、靠不靠谱"。五、性能与安全:上线前 checklist性能(官网打开超过 3 秒,一半访客流失):开页面缓存,动态页面静态化,见PHP-FPM 安装与性能调优图片压缩 + WebP,方法论见网站图片与静态资源优化上 CDN,静态资源走 CDN,见CDN 加速配置[...]
2026-10-18 回复
[...]个人中心(订单 / 地址 / 优惠券)四、接支付:最需要谨慎的一步国内自建电商的支付选项:方式资质要求费率说明微信支付企业主体 + 商户号约 0.6% 起需对接口,或用插件支付宝企业/个体户约 0.6% 起同上个人码收款无0仅限小额/熟人场景,风控严PayPal企业主体约 3.9%+做海外用硬性要求:企业主体才能申请微信/支付宝商户号,个人主体基本没戏——注册主体时想清楚全站 HTTPS 是强制的[...]
2026-10-18 回复