ProxyPin 性能优化 过滤与存储最佳实践
域名过滤优化
域名过滤是性能影响最大的配置之一。
精确优先
# ❌ 太宽泛:所有流量都拦截
.*
# ❌ 还是太宽:只拦 myapp.com 但漏了所有子域
myapp\.com
# ✅ 精确:只拦自己关心的 API 子域
api\.myapp\.com|cdn\.myapp\.com
正则越精确,ProxyPin 处理的请求越少,CPU 和内存压力越低。
顺序影响性能
多条过滤规则时,高频规则放在前面。正则引擎从上往下匹配,先命中就跳过后续。
历史记录管理
设置合理的上限
ProxyPin 自动淘汰最旧的历史记录。建议根据实际使用频率调:
| 使用场景 | 推荐上限 |
|---|---|
| 日常开发调试 | 5000 条 |
| 长时间抓包测试 | 20000 条 |
| CI/CD 流水线 | 抓完即导出 HAR → 清空 |
定期清理
长时间抓包后,磁盘上的历史文件会越来越大。定期导出重要 HAR 后清空历史。
脚本性能
JS 脚本虽然灵活,但每条请求都会执行——脚本里做重计算会影响整体吞吐。
脚本性能原则
- Keep it short:onRequest / onResponse 函数保持短小精悍
- 避免同步网络操作:不要在脚本里发 HTTP 请求(用
context.async) - 合理使用 context.storage:缓存计算结果,不要每次请求都重新算
- 匹配 URL 范围要小:脚本的 URL 正则匹配范围越小越好——不需要所有请求都跑脚本
- 避免复杂正则:正则太复杂(多层嵌套捕获组、负向前瞻)会增加 CPU 开销
反例
// ❌ 每次请求都解析整个响应体
function onResponse(context, response) {
let data = JSON.parse(response.body); // 重操作
let result = deepSearch(data, target); // 深层递归
// ...
}
正例
// ✅ 只在匹配的 URL 上解析
function onResponse(context, response) {
if (response.url.includes('/api/user')) {
let data = JSON.parse(response.body);
// ... 只处理这个特定响应
}
return response;
}
协议优化
开启 HTTP/2
HTTP/2 多路复用减少 TCP 连接数 → 降低系统开销。ProxyPin v1.1.9+ 默认支持。
自动解压开启
zstd / Brotli 解压虽然有 CPU 开销,但解压后的明文内容让调试效率提升远大于这点开销。建议默认开启。
内存管理
ProxyPin 长时间运行时内存会逐渐增长。如果发现内存占用异常:
- 检查历史记录上限是否设得过大
- 检查脚本是否有内存泄漏(context.storage 里存了大对象没清理)
- 定期重启 ProxyPin(历史记录会保留)