Files
wx_pbzc/docs/问题分析_2026-08-04.md
lc b52db87ddf feat: 排行榜虚拟领奖台 + 勋章对齐与尺寸统一
- 领奖台数据不足 3 名时显示虚拟空位(虚线轮廓+虚位以待)
- 领奖台勋章与昵称对齐改为等高盒结构性修复(移除 margin 盲推)
- 全 app 成就勋章图标尺寸统一为 30rpx(前三名/列表/设置页/记录页一致)
- 勋章 SVG 按包围盒精确居中(utils/icons.js)
- 设置页/记录页勋章展示配套调整
2026-08-04 11:23:48 +08:00

6.3 KiB
Raw Permalink Blame History

平板支撑训练小程序 — 代码问题分析(核实修订版)

分析日期:2026-08-04 版本:v3.1 修订:2026-08-04(经事实核实)

修订说明

初版报告列了 8 条"问题",经逐条事实核实(而非凭代码表面/记忆判断),3 条撤回、2 条降级、3 条保留为可选优化。本项目已审核上架运行一个月,代码质量实际很高,初版多处过度判断,特此修正。

核实结论总览

初版判断 核实结果 最终定性
隐私协议缺失(审核风险) 撤回 隐私协议在 MP 后台配置,代码看不到;已上架运行 = 后台已配好
云同步阻塞启动(冷启动多等 2-3s 撤回 onLaunch 的 await 不阻塞首屏,微信为非阻塞生命周期调度
组件 styleIsolation 不一致 撤回 默认 isolated / apply-shared 是合理分层,非问题
console.log 残留(信息泄露) ⬇️ 降级 生产环境仅调试可见,非信息泄露;属代码整洁建议
云环境 ID 硬编码(安全) ⬇️ 降级 云环境 ID 非敏感(数据需 openid 鉴权);属工程化建议
缺少 lazyCodeLoading 保留 可选优化,收益有限(仅 7 个组件)
测试覆盖不足 保留 建议,非问题
月份翻页无上限 保留 极低优先级体验瑕疵

撤回的 3 条(初版判断错误)

1. 隐私协议缺失 — 撤回

  • 初版判断app.json 没配 __usePrivacyCheck__chooseAvatar 会报错,审核被拒。
  • 核实事实:隐私协议配置在小程序 MP 后台(设置 → 服务内容声明 → 用户隐私保护指引),不在代码里。chooseAvatar 确属隐私接口需声明"用户信息",但小程序已审核上架运行一个月,证明后台已配好、隐私弹窗链路已打通。app.json 看不到是正常现象,__usePrivacyCheck__ 仅本地调试用。
  • 结论:非问题。

2. 云同步阻塞启动 — 撤回

  • 初版判断app.js:82 await cloud.pullAll() 阻塞启动链路,冷启动多等 2-3s。
  • 核实事实:微信小程序采用「非阻塞生命周期调度」——框架调用 App.onLaunch不 await 其返回的 Promise,页面 onLoad/onShow 与 onLaunch 并行推进。因此 onLaunch 里的 await cloud.pullAll() 不阻塞首屏渲染,页面照常加载。await 之后的 _restoreFromCloud / cloud.pushAll 本就是后台云操作。且 globalData.theme 在 await 之前已赋值,页面取主题色无影响。
  • 结论:非问题,机制理解错误。

3. 组件 styleIsolation 不一致 — 撤回

  • 初版判断5 个组件未配 styleIsolation(默认 isolated),3 个配 apply-shared,属"不一致问题"。
  • 核实事实:这恰是合理的设计分层——需要继承页面主题色的组件(progress-ring 画主题色环、calendar-heatmap 渲染日历、custom-tab-bar 主题切换)配 apply-shared;样式完全自包含的通用组件(ui-card/btn/modal/skeleton/trend-chart)用默认 isolated 隔离。MEMORY.md 记录的"isolated 时样式穿透靠 CSS 变量"是使用注意事项,不是 isolated 本身的缺陷。
  • 结论:非问题,符合组件化最佳实践。

降级的 2 条(定性过重)

4. console.log 残留 — 降级为代码整洁建议

  • 位置utils/cloud.js18 处)、cloudfunctions/leaderboard/index.js5 处)等
  • 核实事实:小程序生产环境的 console 输出仅开发者工具或真机调试时可见,普通用户看不到,不存在"信息泄露给用户"的风险。openid 等标识确实会出现在日志里,但只有开发者自己调试时能看到。
  • 修正定性:从"信息泄露隐患"降级为"代码整洁度"。保留 console.log 不影响功能与安全,但生产构建剔除更干净。可选优化。

5. 云环境 ID 硬编码 — 降级为工程化建议

  • 位置utils/cloud.js:2 const ENV_ID = 'cloudbase-d1g56kl2q8f4f7d8a'
  • 核实事实:云环境 ID 本身不是敏感凭据——CloudBase 数据访问依赖 openid 鉴权与安全规则,光有环境 ID 无法读取他人数据。单环境个人项目硬编码完全可接受。
  • 修正定性:从"安全/不利多环境"降级为"工程化建议"。仅当未来需要开发/生产双环境切换时才需抽出。可选。

保留的 3 条(可选优化 / 建议)

6. 缺少 lazyCodeLoading(可选优化)

  • 位置app.json
  • 事实:未配 "lazyCodeLoading": "requiredComponents"。该项目仅 7 个自定义组件,按需注入对启动时间的实际提升有限(主要收益在组件数量多的大型小程序)。
  • 建议:可加,低成本、无副作用,但别期待显著提速。

7. 测试覆盖不足(建议)

  • 位置tests/ 仅 3 个测试(badge-state、cloud-data-correctness、trend-state
  • 事实:核心计时器 Timer/CircuitTimer、云同步 cloud.js、语音 voice.js 等关键路径无单元测试。但项目已稳定运行一个月,说明逻辑经受了真实用户验证。
  • 建议:补 timer/circuitTimer 状态机测试、storage 合并去重测试,利于后续重构信心。非阻塞项。

8. 记录页月份翻页无上限(极低优先级瑕疵)

  • 位置pages/records/records.js:158 onNextMonth
  • 事实:可一直往后翻到未来月份,未来月份显示空数据。
  • 建议:限制不超过当前月即可。极低优先级,不影响功能。

最终总体评价

经逐条核实,本项目代码质量高于初版报告所暗示的水平

  • 云同步 openid 预解析防重复 doc、排行榜快照预计算 + 客户端乐观缓存(热路径≈50ms)、计时器 Date.now 对齐无 drift、TTS 双层缓存防账单刷量、已知陷阱(组件隔离/图标色/字体缩放/云函数 data 包裹)均有防御——这些设计扎实可靠。
  • 初版报告的 8 条"问题"中,3 条是判断错误(已撤回),2 条定性过重(已降级),仅 3 条属真实可选优化,且无一是功能性 bug 或合规阻断。

结论:当前无需紧急修复任何项。 若有余力,按优先级可选做:补测试 > 加 lazyCodeLoading > 月份翻页上限 > 清理 console.log。云环境 ID 抽离等有双环境需求时再做。