很多团队优化网页性能,靠的是“感觉”:
- 开了 Gzip,没人测压缩率
- 上了 CDN,没人拆首包时间
- 加了缓存头,没人验证是否命中
- 切了 TLS 1.3,没人算握手省了多少毫秒
结果就是:优化做了,效果没人说得清。
香港服务器在这里的价值,是当一台“中立的协议级测速机”:
- 离大陆近、离海外也近,能同时测两个方向的加载表现
- 可以跑
curl -w、HTTP/2、HTTP/3、TLS 握手、缓存命中对照 - 能生成可重复的性能基线,每次优化都能“前后对比”
本文给一套可复制的“网页性能实测方法论”:不靠某一家测速网页,不靠截图,靠可复现的命令行数据。
一、先建立认知:网页快不快,要拆成六段看
一次完整页面加载:
text
DNS 解析 → TCP 握手 → TLS 握手 → 首字节(TTFB) → 内容传输 → 渲染完成
每一段对应一类问题:
阶段 |
常见慢因 |
验证点 |
DNS |
递归链路深、没缓存、没 ECS |
解析耗时、TTL |
TCP |
跨洋 RTT 高、没复用 |
建连耗时、连接数 |
TLS |
1.2 两次 RTT、证书链长 |
握手耗时、协议版本 |
TTFB |
源站慢、回源慢、没命中缓存 |
首包时间 |
传输 |
没压缩、没 HTTP2 |
传输耗时、压缩率 |
渲染 |
阻塞脚本、图片未优化 |
DOM 完成时间 |
优化前先定位“慢在哪一段”,否则就是瞎调。
二、基础测速:curl -w 是最诚实的工具
1. 标准时间拆解
bash
curl -s -o /dev/null -w '\ dns: %{time_namelookup}\n\ tcp: %{time_connect}\n\ tls: %{time_appconnect}\n\ ttfb: %{time_starttransfer}\n\ total: %{time_total}\n\ size: %{size_download}\n\ code: %{http_code}\n' \ https://www.example.com/
输出示例:
text
dns: 0.012 tcp: 0.045 tls: 0.089 ttfb: 0.312 total: 0.487 size: 18432 code: 200
关键判读:
tls - tcp ≈ 0.044:TLS 只用了一次 RTT(说明是 TLS 1.3)ttfb - tls ≈ 0.223:源站/回源处理时间total - ttfb ≈ 0.175:内容传输时间
2. 验证压缩是否真生效
bash
# 看响应头 curl -sI https://www.example.com/app.js | grep -i 'content-encoding' # 对比压缩前后 curl -s -o /dev/null -w 'size=%{size_download}\n' https://www.example.com/app.js curl -s --compressed -o /dev/null -w 'size=%{size_download}\n' https://www.example.com/app.js
没 content-encoding: br/gzip 说明压缩配置没生效。
3. 验证缓存头
bash
curl -sI https://www.example.com/logo.png | grep -iE 'cache-control|expires|etag'
期望:
- 静态资源:
Cache-Control: public, max-age=2592000, immutable - 带指纹的文件:
immutable必须有
三、进阶对照:同一 URL 多种协议比一比
1. HTTP/1.1 vs HTTP/2(看多请求效率)
bash
# 强制 HTTP/1.1 curl --http1.1 -w 'http1_total=%{time_total}\n' -o /dev/null -s https://www.example.com/ # 强制 HTTP/2 curl --http2 -w 'http2_total=%{time_total}\n' -o /dev/null -s https://www.example.com/
多资源页面,HTTP/2 通常快一截(多路复用)。
2. TLS 1.2 vs TLS 1.3
bash
# TLS 1.2 强制 openssl s_client -tls1_2 -connect www.example.com:443 -servername www.example.com </dev/null 2>/dev/null | grep -E 'Protocol|Cipher' # TLS 1.3 openssl s_client -tls1_3 -connect www.example.com:443 -servername www.example.com </dev/null 2>/dev/null | grep -E 'Protocol|Cipher'
TLS 1.3 握手少一次 RTT,跨洋场景差异明显。
3. HTTP/3(QUIC)实测
bash
curl --http3 -w 'http3_total=%{time_total}\n' -o /dev/null -s https://www.example.com/
丢包环境 QUIC 通常更稳(无队头阻塞)。
四、工具链清单:多地点对照才有说服力
纯命令行适合测 API 和首包,但要测“首屏渲染”,还需要浏览器侧视角:
- 浏览器 DevTools:Network 面板看瀑布流,最直观
- Lighthouse(CLI 版):跑在本地或 CI 里,出分数和审计建议
- WebPageTest 私有实例:自己起一台,数据不出内网
- 多地点测速服务:把香港、新加坡、东京、法兰克福的结果放在一起,看地域差异(这类工具里,类似 kkce 的定位就是把多地点测速结果做对照,适合补命令行看不到的“渲染层”)
选型原则:
- 命令行:测协议层,可脚本化、可进 CI
- 浏览器:测渲染层,看 DOMContentLoaded、LCP、CLS
- 两者结合,才叫“完整性能画像”
五、性能基线:不记基线,优化就没依据
1. 建立基线文件
bash
# 每次跑完追加时间戳 echo "$(date -u +%FT%TZ) $(curl -s -o /dev/null -w '%{time_total}' https://www.example.com/)" >> perf.log
2. 基线格式
text
2026-10-31T02:00:00Z 0.487 2026-10-31T03:00:00Z 0.492 2026-10-31T04:00:00Z 0.481
3. 优化前后对比
bash
# 优化前平均 awk '{sum+=$2;n++} END {print sum/n}' before.log # 优化后平均 awk '{sum+=$2;n++} END {print sum/n}' after.log
六、优化验证 SOP:每次只改一项
别一口气改五处,改完不知道哪项有效。
标准流程:
- 测基线(跑 10 次取中位数)
- 改一项:比如开 Brotli
- 清缓存再测(
curl -H 'Cache-Control: no-cache') - 对比前后
- 进基线库
常见优化项与验证点:
优化 |
验证点 |
开 Brotli |
|
HTTP/2 |
多资源页面总时间下降 |
TLS 1.3 |
握手耗时下降 |
缓存头 |
二次访问 TTFB 接近 0 |
图片 WebP |
响应体大小下降 |
资源指纹名 |
|
七、多地点对照:香港机的位置优势
从香港同时测:
bash
# 测大陆节点 curl -w '%{time_total}' -o /dev/null -s https://cn.example.com/ # 测美西节点 curl -w '%{time_total}' -o /dev/null -s https://us.example.com/ # 测新加坡节点 curl -w '%{time_total}' -o /dev/null -s https://sg.example.com/
一次出三个数据,比“感觉慢”强十倍。
配合:
- 大陆机反测香港
- 海外机反测香港
- 形成“三角测量”,定位劣化方向
八、自动化:把测速写进 CI
yaml
# .github/workflows/perf.yml - name: Measure run: | for i in 1 2 3; do curl -s -o /dev/null -w '%{time_total}\n' https://www.example.com/ >> result.log done echo "P95: $(sort -n result.log | sed -n '3p')"
门禁:
- TTFB p95 超过 500ms → 构建失败
- 传输体积比基线大 10% → 告警
九、安全与合规:测速机不碰业务数据
- 只测公开 URL,不测带 token 的接口
- 请求头不带真实用户身份
- 日志只留时间+耗时,不落请求体
- 测速机不存 PII,符合数据最小化
- 频率控制,别把自己业务压垮
十、最小落地清单
- [ ] 香港机装 curl 7.75+(支持 --http3)
- [ ] 建
perf.log基线,每小时跑一次 - [ ] 每次优化只改一项,前后对比
- [ ] 验证:压缩/缓存头/TLS 版本/HTTP2
- [ ] 多地点对照(大陆/海外/香港)
- [ ] 浏览器侧补 LCP/CLS(DevTools 或 Lighthouse)
- [ ] 测速进 CI,设 p95 门禁
- [ ] 日志只留耗时,不碰业务数据
十一、什么别用测速机干
- 把测速脚本打满带宽(影响业务)
- 测带登录态的接口(合规风险)
- 只看总分不看分段(定位不了问题)
- 一次结果定结论(至少 5 次取中位数)
- 优化完不更新基线(下次没对照)
十二、总结
香港服务器在性能优化里最被低估的价值,不是“快”,而是:
让每一次优化,都有数据前后对照。
DNS 快不快,看 time_namelookup
TCP 稳不稳,看 time_connect
TLS 省没省,看 time_appconnect
源站行不行,看 time_starttransfer
传输够不够,看 time_total
命令行测协议层,
浏览器测渲染层,
多地点测地域差异,
基线库测长期趋势。
网页性能优化最大的敌人不是“技术难”,
是“不知道自己优化完有没有用”。
一台香港测速机,
不存一条业务数据,
却能让每次上线,
都说得出“快了多少毫秒”。