Sfoglia il codice sorgente

docs(release): verify home cache fixes and read optimization rollout

彭峰 19 ore fa
parent
commit
1c15a4b054

+ 44 - 0
perf/recovery-performance-2026-11-14/RELEASE-2026-11-15.md

@@ -0,0 +1,44 @@
+# 首页缓存修复与读取优化发布
+
+2026-11-15(北京时间),用户明确通知“上线”,授权发布候选 `6d6f28466265561dff72d2a37b3656220b86d5dc`。
+
+## 发布范围与备份
+
+- H5版本:`mobile-home-cache-v2-6d6f28466265-20261114T160313735Z`。版本名中的时间使用UTC。发布前版本为 `mobile-three-tap-fd93e27c629f-20261114T145550775Z`;保留已上线的三遍点读功能。
+- app gateway以当时线上代码为底本,仅新增 `appHomeReviewSummary`、替换 `appReviewPage`,保留运行器兼容补丁和其余全部源码。原目标函数与基线逐字一致;事务带旧代码MD5条件,防止覆盖并发修改。
+- 新网关SHA-256:`33b236b9606e7bdc8f4f134b6915cdac0f717462d65ee7b36cf1efcbbf714745`。原网关:`000818f3add2578a1c9cc24a47121fc3dc4fd04914b09df31fa3b48bbd4bfc98`。
+- ops gateway保持 `6f99a3826ab90bb3911d13bf33c2290ebbf850d77ac8163ac4c20b22c8518c0f`。未修改管理端前端、数据库结构、账务规则、共享服务配置或原生安装包。
+- 受保护发布目录:`/Users/mac/.local/state/xiaoshu/qa/2026-11-15-cache-release/`。完整旧代码、105个旧静态资源、入口及清单均已备份;条件回滚脚本已就绪,包含后续发布检测。不删除旧资源或业务数据。
+
+## 已完成核验
+
+- 重新生产构建成功,首页只读回归5/5、云函数定义11/11通过。该候选此前完整本地回归1,383项通过,详见 CACHE-FIX-AND-TIMEOUT.md。
+- 先发布兼容旧客户端的网关,再上传哈希资源、逐文件校验源站,最后切清单与入口。公网105个文件SHA-256、5个深层入口回读通过。
+- CDN刷新任务 `8194520624`:task_done,成功1、失败0。
+- 真实学生请求返回 `view=home` / `snapshot`;真实老师今日列表的新旧参数请求中items/page/summary相同,两端课表读取成功。
+- 真实学生会话在隔离浏览器中注入“旧格式复习响应”,统计/余额仍由真实接口读取:升级后恰好一次新版复习请求,余额与发布前一致;状态过期不产生额外请求,0脚本错误、无横向溢出。未向服务器写入缓存或模拟账务数据。
+- 1024px老师/学生主页及未登录入口检查通过,0脚本错误、无横向溢出。
+- 原老师测试会话已失效;改用此前获授权且仍有效的现有测试会话,没有重置密码或新增登录会话。
+
+## 解释与限制
+
+本批修复缓存契约和状态提示,部署已有读取优化;没有部署共享worker的取消/超时修改,也没有通过延长客户端20秒阈值掩盖等待。历史20秒超时的具体现场阶段仍缺关联日志,本地机制复现不等于生产根因结论。
+
+连续采样在四种页面间交替,使用直连Chrome、390px、Fast4G模拟、全新浏览器上下文、稳定500ms及修正后的余额/统计成功门槛。与前一天基线并非同一时段A/B,不能把差值全部归因于代码。完整最终结果将在核对完成后追加。
+
+## 最终连续验收
+
+四类页面各10次,共40/40成功;捕获到的业务请求全部HTTP200/retcode0,未记录函数请求失败,本轮未复现20秒超时。学生首页每次资料/统计/复习三项响应均完整捕获,使用已修正的余额/统计错误门槛。
+
+| 页面 | 成功次数 | p75可操作时间 | p95可操作时间 |
+|---|---:|---:|---:|
+| 学生首页 | 10/10 | 2.456秒 | 2.589秒 |
+| 老师首页 | 10/10 | 3.194秒 | 3.319秒 |
+| 学生当天课表 | 10/10 | 2.756秒 | 2.888秒 |
+| 老师当天课表 | 10/10 | 2.686秒 | 2.772秒 |
+
+老师首页p75仍高于3秒;本轮证明该样本连续可用,不宣称所有页面已达本地3秒目标或历史超时已根治。采样期间没有并行运行其他UI/基准检查。
+
+最终核对:两个真实测试账号余额字段与发布前一致,老师统计业务结果完整一致;抽查学生全量课时流水聚合版本及条数一致。未执行开课、结课、取消或财务写入。网关最终回读为候选代码,ops gateway逐字未变。
+
+完整脱敏回执见 release-2026-11-15-verification.json。**本批已上线并完成上述验收;历史超时的具体现场归因仍待关联日志。**

+ 153 - 0
perf/recovery-performance-2026-11-14/release-2026-11-15-verification.json

@@ -0,0 +1,153 @@
+{
+  "status": "deployed_and_verified",
+  "clientDate": "2026-11-15 Asia/Shanghai",
+  "commit": "6d6f28466265561dff72d2a37b3656220b86d5dc",
+  "releaseId": "mobile-home-cache-v2-6d6f28466265-20261114T160313735Z",
+  "public": [
+    {
+      "role": "mobile",
+      "releaseId": "mobile-home-cache-v2-6d6f28466265-20261114T160313735Z",
+      "commit": "6d6f28466265561dff72d2a37b3656220b86d5dc",
+      "filesVerified": 105,
+      "routes": [
+        "pages/home/index",
+        "pages/member/starshop",
+        "pages/companion/index",
+        "pages/stu/stu_abc",
+        "pages/stu/stu_con"
+      ]
+    }
+  ],
+  "cdn": {
+    "id": "8194520624",
+    "status": "task_done",
+    "processing": 0,
+    "succeed": 1,
+    "failed": 0,
+    "total": 1
+  },
+  "gateways": [
+    {
+      "path": "xiaoshu/ops/gateway-v3",
+      "sha256": "6f99a3826ab90bb3911d13bf33c2290ebbf850d77ac8163ac4c20b22c8518c0f"
+    },
+    {
+      "path": "xiaoshu/app/gateway",
+      "sha256": "33b236b9606e7bdc8f4f134b6915cdac0f717462d65ee7b36cf1efcbbf714745"
+    }
+  ],
+  "api": {
+    "at": "2026-11-14T16:08:09.441Z",
+    "results": [
+      {
+        "role": "student",
+        "action": "app_review_page",
+        "ms": 370,
+        "success": true,
+        "view": "home",
+        "syncState": "snapshot"
+      },
+      {
+        "role": "teacher",
+        "action": "app_review_page",
+        "ms": 434,
+        "success": true
+      },
+      {
+        "role": "teacher",
+        "action": "app_review_page",
+        "ms": 333,
+        "success": true
+      },
+      {
+        "role": "teacher",
+        "action": "app_companion_overview",
+        "ms": 165,
+        "success": true
+      },
+      {
+        "role": "student",
+        "action": "app_companion_overview",
+        "ms": 265,
+        "success": true
+      }
+    ],
+    "teacherFieldsEqual": true,
+    "opsGatewayUnchanged": true,
+    "studentSnapshot": true
+  },
+  "desktop": [
+    {
+      "role": "guest",
+      "ok": true,
+      "jsErrors": 0,
+      "noHorizontalOverflow": true
+    },
+    {
+      "role": "teacher",
+      "ok": true,
+      "jsErrors": 0,
+      "noHorizontalOverflow": true
+    },
+    {
+      "role": "student",
+      "ok": true,
+      "jsErrors": 0,
+      "noHorizontalOverflow": true
+    }
+  ],
+  "warmCache": {
+    "warmLegacyCacheMigrated": true,
+    "reviewRequests": 1,
+    "newHomeMode": true,
+    "expiredLabelWithoutRequests": true,
+    "visibleBalancesMatchBefore": true,
+    "jsErrors": 0,
+    "noHorizontalOverflow": true
+  },
+  "browser": {
+    "student-course": {
+      "samples": 10,
+      "success": 10,
+      "p75ReadyMs": 2756,
+      "p95ReadyMs": 2888
+    },
+    "student-home": {
+      "samples": 10,
+      "success": 10,
+      "p75ReadyMs": 2456,
+      "p95ReadyMs": 2589
+    },
+    "teacher-course": {
+      "samples": 10,
+      "success": 10,
+      "p75ReadyMs": 2686,
+      "p95ReadyMs": 2772
+    },
+    "teacher-home": {
+      "samples": 10,
+      "success": 10,
+      "p75ReadyMs": 3194,
+      "p95ReadyMs": 3319
+    }
+  },
+  "pageLoads": 40,
+  "pageLoadFailures": 0,
+  "capturedFunctionRequestFailures": 0,
+  "financialVerification": {
+    "sampleAccounts": 2,
+    "balanceFieldsUnchanged": true,
+    "teacherStatisticsUnchanged": true,
+    "sampleStudentFullLedgerVersionUnchanged": true,
+    "sampleStudentLedgerTotalUnchanged": true,
+    "financialSourceFilesUnchanged": 15,
+    "noBusinessWritesPerformed": true
+  },
+  "limits": [
+    "Real sessions used; no new password login or physical-device acceptance.",
+    "Prior-day comparison is not concurrent randomized A/B; current timing improvement cannot be attributed solely to candidate.",
+    "No 20-second timeout reproduced in this sample; historical root cause remains unconfirmed.",
+    "Financial verification samples two accounts and one full student ledger, not all accounts.",
+    "Shared worker diagnostics and cancellation changes were not deployed."
+  ]
+}