浏览代码

docs(perf): record verified payroll acceleration production release

彭峰 2 小时之前
父节点
当前提交
a47e560bfe

+ 21 - 0
perf/admin-speed-round2-2026-11-10/live-warm-verification.json

@@ -0,0 +1,21 @@
+{
+  "at": "2026-11-10T06:22:20.928Z",
+  "checks": [
+    {
+      "operation": "ops/payroll/overview",
+      "ms": 3907,
+      "verified": true
+    },
+    {
+      "operation": "ops/dashboard/summary",
+      "ms": 2614,
+      "verified": true
+    },
+    {
+      "operation": "ops/coaches/list",
+      "ms": 1286,
+      "verified": true
+    }
+  ],
+  "temporaryGatewaysRemoved": true
+}

+ 89 - 0
perf/admin-speed-round2-2026-11-10/release-verification.json

@@ -0,0 +1,89 @@
+{
+  "at": "2026-11-10T06:24:45.461Z",
+  "origin": "https://admin.xiaoshu.pro",
+  "releaseId": "admin-speed2-e72a405025aa-20261110T062158898Z",
+  "commit": "e72a405025aa102680c1ee30404fae656b029d6c",
+  "filesVerified": 96,
+  "deepRoutesVerified": 12,
+  "readOnly": true,
+  "measurement": "One production smoke sample per page; not comparable to controlled p75",
+  "pages": [
+    {
+      "page": "dashboard",
+      "readyMs": 1153,
+      "passed": true,
+      "primaryRequests": 1
+    },
+    {
+      "page": "members",
+      "readyMs": 1130,
+      "passed": true,
+      "primaryRequests": 1
+    },
+    {
+      "page": "stores",
+      "readyMs": 1704,
+      "passed": true,
+      "primaryRequests": 1
+    },
+    {
+      "page": "schedule",
+      "readyMs": 1954,
+      "passed": true,
+      "primaryRequests": 1
+    },
+    {
+      "page": "coaches",
+      "readyMs": 923,
+      "passed": true,
+      "primaryRequests": 1
+    },
+    {
+      "page": "payroll",
+      "readyMs": 1294,
+      "passed": true,
+      "primaryRequests": 1,
+      "verificationDisabled": true,
+      "coachDetailMs": 409,
+      "exportVerified": true
+    },
+    {
+      "page": "lessons",
+      "readyMs": 3819,
+      "passed": true,
+      "primaryRequests": 1,
+      "menuReturn": {
+        "ms": 80,
+        "primaryRequests": 0
+      }
+    },
+    {
+      "page": "learning-reports",
+      "readyMs": 1394,
+      "passed": true,
+      "primaryRequests": 1
+    },
+    {
+      "page": "support-requests",
+      "readyMs": 803,
+      "passed": true,
+      "primaryRequests": 1,
+      "menuReturn": {
+        "ms": 62,
+        "primaryRequests": 0
+      }
+    },
+    {
+      "page": "vocabulary",
+      "readyMs": 1452,
+      "passed": true,
+      "primaryRequests": 1
+    },
+    {
+      "page": "special-training",
+      "readyMs": 855,
+      "passed": true,
+      "primaryRequests": 1
+    }
+  ]
+}

+ 20 - 0
perf/admin-speed-round2-2026-11-10/release.json

@@ -0,0 +1,20 @@
+{
+  "at": "2026-11-10T06:25:09.050Z",
+  "sourceCommit": "e72a405025aa102680c1ee30404fae656b029d6c",
+  "releaseId": "admin-speed2-e72a405025aa-20261110T062158898Z",
+  "gatewayHash": "5cb36e2e4c4fa3ad8fb342b80fa2ea4acf6dc33ba91ef53d036151708472d310",
+  "previousGatewayHash": "ea4cb7d20db45a1524bae1b9c5a52e241fe93d50bfd441f1780f2ba7f1cdda63",
+  "helperHash": "4092a2e62364e6e27944391593d6377b764d02e8a2a6ea613e5142459eb9086e",
+  "cdnRefresh": "8143423844",
+  "filesVerified": 96,
+  "deepRoutesVerified": 12,
+  "modulesVerified": 11,
+  "readOnlyBusinessAcceptance": true,
+  "originalFinancialFunctionsUnchanged": true,
+  "tests": {
+    "backend": 46,
+    "admin": 361,
+    "cloudDefinitions": 11
+  },
+  "rollbackRehearsed": true
+}

+ 1 - 1
perf/admin-speed-round2-2026-11-10/verify-live.mjs

@@ -42,7 +42,7 @@ for(const [name,selector] of Object.entries(selectors)){
    const startDetail=performance.now(),response=page.waitForResponse(r=>r.request().method()==='POST'&&r.request().postDataJSON()?.params?.lineCoachId===coachId,{timeout:60000});
    await page.locator('.view-action').first().click();const result=await(await response).json();assert.equal(result.success,true);assert.ok(result.data.lines.every(l=>l.coachId===coachId));assert.notEqual(result.data.sourceStatus.sync.state,'not_checked');
    await page.waitForFunction(()=>!document.querySelector('.payroll-drawer')?.textContent?.includes('正在加载明细'),null,{timeout:60000});assert.equal(await page.locator('.payroll-drawer tbody tr').count(),Math.max(result.data.lines.length,1));coachDetailMs=Math.round(performance.now()-startDetail);
-   await page.locator('.payroll-drawer button[aria-label="关闭"]').click();assert.equal(await page.locator('.payroll-drawer').count(),0);
+   await page.locator('.payroll-drawer button[aria-label="关闭"]').click();await page.locator('.payroll-drawer').waitFor({state:'detached',timeout:5000});assert.equal(await page.locator('.payroll-drawer').count(),0);
   }
  }
 

+ 6 - 0
perf/admin-speed-round2-2026-11-10/验收报告.md

@@ -33,3 +33,9 @@
 - 最终发布版本及公网校验见 release-verification.json;完整回滚方式见 README.md。
 
 性能回归门禁见 ratchet.json:真实业务等价、每页首屏主要读取仅 1 次、首屏无明细传输、明细准确性以及完整重算不得伪命中缓存。时间回归使用重复配对测量,不用一次随机样本直接判错。
+
+## 正式发布
+
+已发布到 https://admin.xiaoshu.pro ,版本 admin-speed2-e72a405025aa-20261110T062158898Z,源码提交 e72a405025aa102680c1ee30404fae656b029d6c。公网无查询参数回读 96 个文件哈希及 12 个深路由均一致;11 个模块只读验收通过。费用明细的打开、关闭和完整导出金额校验通过。线上费用页单次样本 1.294 秒、老师明细 0.409 秒;该样本不冒充分位统计。
+
+首次验收脚本在点击关闭抽屉后立即读取 DOM,碰到 Angular 渲染时序;已改为等待抽屉实际移除后断言,完整复跑通过。未因此改动已发布应用。