Title: perf: reuse OpenAI client and add undici keep-alive Agent with connection warmup by Lellansin · Pull Request #100 · lessweb/deepcode-cli · GitHub
Open Graph Title: perf: reuse OpenAI client and add undici keep-alive Agent with connection warmup by Lellansin · Pull Request #100 · lessweb/deepcode-cli
X Title: perf: reuse OpenAI client and add undici keep-alive Agent with connection warmup by Lellansin · Pull Request #100 · lessweb/deepcode-cli
Description: 概述 优化 OpenAI API 客户端的 HTTP 连接复用,减少用户输入间隙的 TLS 握手开销。 背景 默认 undici 全局 fetch 的 TCP 连接保活时间仅 4 秒 CLI 场景下用户阅读 LLM 输出通常需要 10–30 秒,远超 4 秒阈值 每次新 prompt(含 chat、tool use)都需要重新完成 TCP+TLS 握手(实测 ~127ms),冷启动首字节延迟 200ms+ 性能收益 每次 LLM 调用(chat、tool use 等)减少 80ms~100ms,冷启动首字节延迟从约 210ms 降至约 130ms,降幅约 38%~43%。 指标 优化前 优化后 改善 TCP+TLS 握手 每次请求 仅首次预热一次 — 冷启动 TTFB ~210ms ~130ms ↓ 38% 连接保活 4s(默认) 180s 45x 首次请求 用户等待 启动时后台预热 用户无感知 数据来源:scripts/benchmark-optimization.mjs,API 为 api.deepseek.com,deepseek-chat 模型,3 轮连续对话。 可以参考 LOL、王者等游戏的 200+ms 延迟降低到 130ms,体感上这种延迟降低可以改善使用上的手感。 从绝对值来说,100 次 chat/tool_use 大概可以节约 10s,这对长任务来说也有一定的改善收益。 改动 用自定义 undici Agent(keepAliveTimeout: 180s)替换默认 fetch 缓存复用 OpenAI client 实例(按 apiKey + baseURL 匹配) 连接预热:App 挂载时 fire-and-forget 预建 TCP+TLS 连接(3s 超时保护) 将以上逻辑提取到 src/common/openai-client.ts,保持 App.tsx 精简 文件变更 文件 说明 package.json 新增 undici: ^7.25.0 src/common/openai-client.ts 新文件:undici Agent、client 缓存、连接预热、getMachineId src/ui/App.tsx 移除 ~90 行代码,改为从 common 模块引用 src/ui/index.ts 更新 re-export 路径 检查 ✅ TypeScript 类型检查 ✅ ESLint ✅ Prettier 格式 ✅ 311 项测试全部通过
Open Graph Description: 概述 优化 OpenAI API 客户端的 HTTP 连接复用,减少用户输入间隙的 TLS 握手开销。 背景 默认 undici 全局 fetch 的 TCP 连接保活时间仅 4 秒 CLI 场景下用户阅读 LLM 输出通常需要 10–30 秒,远超 4 秒阈值 每次新 prompt(含 chat、tool use)都需要重新完成 TCP+TLS 握手(实测 ~127ms),冷启动首字节延...
X Description: 概述 优化 OpenAI API 客户端的 HTTP 连接复用,减少用户输入间隙的 TLS 握手开销。 背景 默认 undici 全局 fetch 的 TCP 连接保活时间仅 4 秒 CLI 场景下用户阅读 LLM 输出通常需要 10–30 秒,远超 4 秒阈值 每次新 prompt(含 chat、tool use)都需要重新完成 TCP+TLS 握手(实测 ~127ms),冷启动首字节延...
Opengraph URL: https://github.com/lessweb/deepcode-cli/pull/100
X: @github
Domain: github.com
| route-pattern | /:user_id/:repository/pull/:id/files(.:format) |
| route-controller | pull_requests |
| route-action | files |
| fetch-nonce | v2:b0ddc830-9bca-3add-64d2-19d541d6c292 |
| current-catalog-service-hash | ae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b |
| request-id | EE30:3BF7C9:1B0CA6:2471FC:6A4D3298 |
| html-safe-nonce | 1fc26775e99dab0b2c9de6b3be9860bb2fd38e6dfb7e71bfacfcedc1bb4b44c6 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFRTMwOjNCRjdDOToxQjBDQTY6MjQ3MUZDOjZBNEQzMjk4IiwidmlzaXRvcl9pZCI6Ijg4MDg1NTMwNTQ4Mjk2MjE5MTIiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 13446200c4cc4ac1bf54312c1a4907ed5c9df2392c382b43161ea7ec8bb5fe9a |
| hovercard-subject-tag | pull_request:3716110063 |
| github-keyboard-shortcuts | repository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/lessweb/deepcode-cli/pull/100/files |
| twitter:image | https://avatars.githubusercontent.com/u/2081487?s=400&v=4 |
| twitter:card | summary_large_image |
| og:image | https://avatars.githubusercontent.com/u/2081487?s=400&v=4 |
| og:image:alt | 概述 优化 OpenAI API 客户端的 HTTP 连接复用,减少用户输入间隙的 TLS 握手开销。 背景 默认 undici 全局 fetch 的 TCP 连接保活时间仅 4 秒 CLI 场景下用户阅读 LLM 输出通常需要 10–30 秒,远超 4 秒阈值 每次新 prompt(含 chat、tool use)都需要重新完成 TCP+TLS 握手(实测 ~127ms),冷启动首字节延... |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | 92571a8944142227b7e19cd10918b1ddd06e5066c1ad5bc7e4769cf6140a87e6 |
| turbo-cache-control | no-preview |
| diff-view | unified |
| go-import | github.com/lessweb/deepcode-cli git https://github.com/lessweb/deepcode-cli.git |
| octolytics-dimension-user_id | 118287711 |
| octolytics-dimension-user_login | lessweb |
| octolytics-dimension-repository_id | 1223512305 |
| octolytics-dimension-repository_nwo | lessweb/deepcode-cli |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1223512305 |
| octolytics-dimension-repository_network_root_nwo | lessweb/deepcode-cli |
| turbo-body-classes | logged-out env-production page-responsive full-width |
| disable-turbo | true |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 56fc8347865a14e2ec811533d68f929cf4e0ec19 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width