ProxyPin 中文文档 下载 App

ProxyPin HAR 性能分析 慢请求定位

HAR timings 字段含义

HAR 的 timings 对象是性能分析的核心:

"timings": {
  "blocked": 10,     // 排队等待时间(TCP 连接池满)
  "dns": 20,         // DNS 域名解析时间
  "connect": 30,     // TCP 三次握手时间
  "ssl": 40,         // TLS 握手时间(包含在 connect 里)
  "send": 5,         // 发送请求时间
  "wait": 100,       // TTFB:首字节到达时间
  "receive": 15,     // 接收响应体时间
  "time": 150        // 总耗时
}

总耗时 = blocked + dns + connect + send + wait + receive

各阶段慢意味着什么

慢的阶段可能原因优化方向
DNS域名解析慢、DNS 服务器问题换 DNS 服务器、DNS 预解析、HTTPDNS
TCP网络延迟高、跨地域就近部署服务器、CDN、HTTP/2 多路复用
TLS证书链太长、TLS 版本低TLS 1.3、OCSP Stapling、证书链优化
TTFB (wait)后端处理慢、数据库查询慢后端性能优化、CDN 缓存
receive响应体太大、带宽不够压缩、分页、CDN
blocked并发连接数不够HTTP/2、增加连接池

在 ProxyPin 中找慢请求

方式一:请求列表排序

ProxyPin 请求列表支持按耗时排序,点击列头切换降序。

方式二:高级搜索

duration:>1000 AND method:GET

找出所有 GET 请求中耗时超过 1 秒的。

方式三:导出 HAR 后 Python 分析

import json

with open('traffic.har') as f:
    har = json.load(f)

entries = har['log']['entries']

# 找出各阶段最慢的 Top 10
for metric in ['dns', 'connect', 'wait', 'receive']:
    slowest = sorted(entries, key=lambda x: x['timings'].get(metric, 0), reverse=True)[:10]
    print(f'\n--- {metric} 最慢 Top 10 ---')
    for e in slowest:
        print(f"  {e['timings'].get(metric, 0):.0f}ms | {e['request']['url'][:80]}")

典型性能问题定位

场景一:App 首屏慢

HAR 导出后发现:

场景二:大量 blocked 时间

blocked 占了总耗时的 30%+:

场景三:TLS 握手慢

iOS/Android 首次启动 App 时 HTTPS 请求特别慢:

自动化性能守卫

在 CI/CD 中接入:

  1. ProxyPin headless 抓包
  2. 导出 HAR
  3. 检查关键 API 的 TTFB 是否超标
  4. 超标则构建失败提醒

这样性能回退能在提交代码时就被发现,而不是上线后用户反馈。