脚本从 frontend/scripts 挪到 frontend/tests,不再从会被打包的目录引用测试夹具。业务代码没动,对照数字没重跑。tsc 通过,lint 0 个错误(125 条原有警告),镜像导入守卫 2 通过、0 失败。 Co-Authored-By: Grok (agent loop)
5.3 KiB
进度 · 服务器内存与数据库往返(2026-10-13)
issue #58。分支 codex/node-runtime-resources-20261013。
2026-10-14 按修复单把往返对照脚本从 frontend/scripts/bench-local-pg-roundtrips.ts 挪到 frontend/tests/bench-local-pg-roundtrips.ts。文件名不是 .test.ts,全量测试不会自动收进去。业务代码没有改,对照数字没有重跑。原任务书里的旧路径保持不动。
任务书基线写的是 77057a819,计划评论里的基线是 2994588ad4d858dead4835943e5883c5aa2b03f8。本分支实际从当时的 origin/staging 66cd60081f37a57680274633fcb3fb942d01bb2f 拉出。没有因此停下来问产品,改动仍按任务书做。
做了什么
- 报告工人的等待:计时器到点就摘掉取消监听。引导打分里同一段等待也摘掉。空转不再往进程上堆监听。
- 本地数据库:列、主键、函数签名缓存 300 秒;设置角色和两条身份合成一条语句。开始和提交仍分开。两个开关默认打开,写成
off时语句顺序与改前一致。 - 三张内存表:交付记录超过 60 秒删除,最多 1 万条;重算记录超过 6 小时删除,最多 5 千条;限流按见过的最大窗口清理已出窗的键。
- 登录读缓存:只有
IDENTITY_SESSION_COOKIE_CACHE=on才缓存 300 秒。默认关闭。
不做的
只读、又没有身份时省掉事务:不做。那种做法只能用会话级角色,归还连接前再清。往返数不降,而且一旦没清掉,下一次请求会带着上一次的角色。违反「连接还回池子时不能带着角色或身份」。
begin 没有并进一条多语句查询。
语义变化
同一道校正题、同一份证据,6 小时后或因为超过 5 千条被挤出后,可能再重算一次。这比「进程重启后才会再算」更收敛。60 秒内的交付去重、窗口内的限流允许或拒绝,都没有改。
基线失败
修之前的等待写法,在第 200 次空转时取消信号上还有 199 个监听。同形脚本输出:listenersAt200=199,assertion failed: 199 !== 0。修之后的测试断言是 0,并且通过。
登录读取的调用点
敏感,每次跳过缓存:
- 改密码:
frontend/src/app/api/account/password/route.ts - 注销账户:
frontend/src/app/api/account/deletion/route.ts - 全部后台入口:
frontend/src/lib/admin/auth.ts
其余业务接口走 createServerSupabaseClient(),不带跳过参数。开关打开后,这些普通读取可以走 300 秒缓存。
改邮箱、两步验证、后台插件自带的敏感入口本来就会重新读库,这次没改。咨询里检查「正在注销」的那次调用,以及后台查封禁的语句,都没有改成缓存。
对照结论
详见 docs/testing/node-runtime-resources-ab-20261013.md。两个数据库开关一起:往返 49 → 32(低于 70%),耗时中位数 75.84 → 36.48 毫秒(下降 51.9%),返回内容一致。npm run test:db 开关关、开关开各一轮,都是 81 项、通过 68、失败 13、取消 0。失败名称与 tools/agent-loop/windows-known-failures.txt 的 13 条相同,没有多出来的。运行器因此退出码是 1,这 13 条是 Windows 上原有的。两个数据库开关默认打开。
登录读缓存的查库次数在测试里从 3 降到 1,但没有对真实身份库做耗时对照,默认保持关闭。要打开,把 IDENTITY_SESSION_COOKIE_CACHE 设成 on。
网页容器已经用 env 文件读环境变量,所以这三个名字不必改 Compose。
自测
| 检查 | 命令 | 结果 |
|---|---|---|
| 类型 | tsc --noEmit -p frontend |
通过,退出码 0 |
| 规范 | npm run lint(在 frontend) |
0 error,125 条原有 warning,未改 |
| 本单测试 | tsx --test 任务书点名的文件加登录缓存测试 |
134 通过,0 失败,0 取消 |
| 真库身份 | database-local-postgres-session-setup.test.ts |
1 通过。事务内角色和身份生效,连接归还后再借出时身份已空 |
| 数据库套件 | npm run test:db,两开关先关后开 |
各 81 / 通过 68 / 失败 13 / 取消 0,名称与已知清单一致 |
| 往返对照 | tests/bench-local-pg-roundtrips.ts(按修复单从 scripts/ 挪来) |
见上,payloadMismatch false。数字未重跑 |
没有跑前端全量 npm test、Python 快速门、next build。生产内存曲线要等部署后看。真机两台设备改密码的步骤在 docs/testing/node-runtime-resources-20261013.md,登录缓存默认关着,那份清单的第 2 步要先把开关打开才看得到。
2026-10-14 修复单
按 docs/tasks/TASK-node-runtime-resources-fix-20261014.md:先合并最新 origin/staging,再把对照脚本挪进测试目录。业务代码没有改。对照数字没有重跑。
和上一版 4c3485bc 比,网页业务目录里多出来的只有合并进来的校正提速改动(frontend/src/lib/rectification-agentic/v9/engine-client.ts),不是这单写的。这单自己的提交不碰 frontend/src。
| 检查 | 命令 | 结果 |
|---|---|---|
| 类型 | tsc --noEmit -p frontend |
通过,退出码 0 |
| 规范 | npm run lint(在 frontend) |
0 error,125 条原有 warning,未改 |
| 镜像导入守卫 | tsx --test tests/runtime-sources-no-test-imports.test.ts |
2 通过,0 失败,0 取消 |