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

76 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 平板支撑训练小程序 — 代码问题分析(核实修订版)
> 分析日期: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 抽离等有双环境需求时再做。