# DevTools 卡死根因分析与修复 > 日期: 2026-05-14 | 参与者: AI 辅助分析 ## 背景 微信小程序在 DevTools 中频繁卡死,表现为: - 所有 API 请求失败(`ERR_SSL_PROTOCOL_ERROR`) - Tab 切换后页面长时间无响应(30s+) - 登录流程点击无反应 - DevTools 完全失去响应需强制关闭 ## 根因分析 ### 根因 1(CRITICAL):http→https 自动转换 **文件**: `apps/miniprogram/src/services/request.ts` ```typescript // 旧代码:production 模式自动将 http 替换为 https if (process.env.NODE_ENV === 'production' && url.startsWith('http://')) { return url.replace('http://', 'https://'); } ``` **问题**: `taro build --type weapp` 默认是 production 构建。所有 API 请求从 `http://localhost:3000` 被强制改为 `https://localhost:3000`,而后端只支持 HTTP。每个请求都失败 → 错误处理循环 → React 重渲染 → 内存增长 → DevTools 卡死。 **修复**: 移除自动协议升级,让 `.env` 文件作为 URL 唯一来源。 ### 根因 2(CRITICAL):getHeaders 中的同步 Token 刷新 **文件**: `apps/miniprogram/src/services/request.ts` ```typescript // 旧代码:每个请求前 await tryRefreshToken() async function getHeaders() { if (expiresAt && Date.now() > expiresAt - 60_000) { await tryRefreshToken(); // 15 秒超时 refreshHeadersCache(); } } ``` **问题**: 健康页 `didShow` 触发 4 个并发 API 请求,每个都先 `await getHeaders()`。当 Token 接近过期时,所有请求同时卡在 `tryRefreshToken()` 上。如果 refresh 超时(15 秒),加上 401 重试再超时(15 秒),**总计 30 秒无响应**。 **修复**: 移除 `getHeaders()` 中的 Token 刷新预检查,仅依赖已有的 401 重试逻辑(`request` 函数中 status === 401 时触发 `tryRefreshToken()`)。 ### 根因 3(HIGH):DevTools 中 getPhoneNumber 不工作 **文件**: `apps/miniprogram/src/pages/login/index.tsx` **问题**: 微信登录流程需要两步: 1. `Taro.login()` → 获取 code → 后端返回 `bound: false`(mock openid 不在 DB) 2. `