根因:主包 2MB 全量组件注入导致 DevTools 渲染引擎内存渐增, 叠加离线时固定 3s 抑制期后的请求洪泛。 修复: - app.config.ts 添加 lazyCodeLoading: requiredComponents 主包 2.0MB→766KB,taro.js 526→131KB,vendors.js 230→28KB - request.ts 离线抑制改为指数退避(3s→6s→12s→30s cap) 后端不可达时自动延长抑制,防止请求风暴 - SegmentTabs Tab 接口改为 readonly,修复 TS 编译错误 - AbortController polyfill 补齐小程序运行时缺失 - 健康首页/设备同步/健康档案/报告/设置页 UI 重构 - 文章页公开端点适配游客访问 - 健康首页 Swiper 间隔优化 4s→5s,动画 500→300ms
4.6 KiB
4.6 KiB
小程序上线前五专家组深度审计 + 头脑风暴
日期: 2026-05-20 | 参与者: UX/UI 审计 / 性能稳定性 / 安全审计 / 产品架构 / 代码质量
背景
小程序(62 页面 + 34 组件 + 38 service)即将交付用户测试。启动 5 个并行专家组进行全方位深度审计,确保交付版本的质量和可用性。
五专家组综合评分
| 专家组 | 评分 | CRITICAL | HIGH | MEDIUM | LOW | 总问题数 |
|---|---|---|---|---|---|---|
| UX/UI 审计 | 6.2/10 B- | 3 | 8 | 14 | 9 | 34 |
| 性能稳定性 | 6.5/10 B- | 1 | 4 | 10 | 8 | 25 |
| 安全审计 | 5.1/10 D+ | 2 | 5 | 8 | 6 | 21 |
| 产品架构 | 6.0/10 C+ | 2 | 6 | 8 | 5 | 21 |
| 代码质量 | — | 0 | 2 | 3 | 0 | 134 空 catch + 10 any |
| 综合 | 6.0/10 C+ | 8 | 25 | 43 | 28 | ~135+ |
CRITICAL 汇总(必须修复,阻断用户测试)
| # | 来源 | 问题 | 影响 |
|---|---|---|---|
| 1 | 产品 | 咨询创建页缺失,"发起咨询"按钮导航失败 | 核心咨询流程阻断 |
| 2 | 产品 | 随访流程不闭环(患者无触发入口 + 医生无执行页面) | 医疗质量核心链路断裂 |
| 3 | 安全 | 硬编码管理员凭据 admin/Admin@2026 在源码中 |
反编译可获取管理员权限 |
| 4 | 安全 | Token 明文存储在 Storage(secure-storage 实际无加密) | 设备丢失 = 身份冒用 |
| 5 | UX | AI 聊天页 13 处硬编码字号,长者模式完全失效 | TabBar 核心页老年用户不可用 |
| 6 | UX | 咨询详情页 14 处硬编码字号 | 医患沟通场景老年患者无法阅读 |
| 7 | UX | Loading 文字 28px 过大,误认为标题 | 视觉层级混乱 |
| 8 | 性能 | 咨询页长轮询可能永远不启动(dataLoadedRef 时序竞争) | 咨询消息收不到 |
HIGH 汇总(严重影响体验,应在上线前修复)
| # | 来源 | 问题 |
|---|---|---|
| 1 | 产品 | "消息" Tab 实为 AI 聊天,非消息中心,命名误导 |
| 2 | 产品 | 预约创建未选就诊人,多就诊人场景不可用 |
| 3 | 产品 | 趋势图仅 7 天柱状图,缺长期趋势和对比 |
| 4 | 产品 | 日常监测/设备同步入口层级过深 |
| 5 | UX | 87 处页面硬编码字号,长者模式系统性失效 |
| 6 | UX | StatusTag 色值与设计系统不一致 |
| 7 | UX | 44 个页面缺少 ErrorState |
| 8 | UX | AI 聊天页未使用 PageShell 组件 |
| 9 | 安全 | X-Patient-Id/X-Tenant-Id Header 可能导致越权 |
| 10 | 安全 | openid 明文存储和跨网络传输 |
| 11 | 安全 | RichText XSS 绕过风险 |
| 12 | 性能 | 主包 12 页面可能超 2MB,无法发布 |
| 13 | 性能 | 无虚拟滚动,长列表性能差 |
| 14 | 性能 | 首页 4 个并行 API 无批量优化 |
| 15 | 代码 | 134 处空 catch 静默吞错 |
头脑风暴 — 上线策略
方案 A: 保守上线(修复所有 CRITICAL + 安全加固)
时间: 3-4 天 范围: 8 个 CRITICAL + 安全 TOP 3 风险: HIGH 级别问题可能影响用户第一印象
方案 B: 全面打磨(修复 CRITICAL + HIGH + 关键 MEDIUM)
时间: 7-10 天 范围: 全部 CRITICAL + HIGH + 选定 MEDIUM 风险: 延迟用户测试,但交付质量更高
方案 C: 分层交付(推荐)
时间: 分 3 批,每批 2-3 天 范围:
- Batch 1 (P0, 2天): 安全 CRITICAL + 功能 CRITICAL + 性能 CRITICAL
- Batch 2 (P1, 2天): UX 一致性 + 长者模式修复 + HIGH 级产品问题
- Batch 3 (P2, 3天): MEDIUM 级优化 + 性能优化 + 代码质量
决策
采用方案 C 分层交付,优先确保安全和功能完整,然后打磨体验。
Batch 1 修复清单(P0, 预估 2 天)
- 移除硬编码凭据 → 环境变量注入(1h)
- 确认后端不信任前端 Header(2h)
- 咨询创建页缺失 → 新增页面或移除入口按钮(4h)
- 咨询页长轮询启动时序修复(2h)
- Loading 文字 token 修正(0.5h)
- Token 存储安全加固(4h)— 可延至 Batch 2
Batch 2 修复清单(P1, 预估 2 天)
- AI 聊天页 + 咨询详情页字号 token 替换(4h)
- 医生端核心页面字号 token 替换(3h)
- StatusTag 色值对齐设计系统(1h)
- AI 聊天页接入 PageShell(2h)
- 移除 forceSetAuth bridge(0.5h)
- 随访流程闭环补全(4h)— 可延至 Batch 3
Batch 3 修复清单(P2, 预估 3 天)
- 全局 87 处硬字号 → token 批量替换
- 74 处硬 padding → token 批量替换
- 44 个页面补充 ErrorState
- 主包瘦身 + splitChunks 配置
- 空 catch 添加日志
- AI 聊天历史持久化(接后端 API)