perf(core): Wave 0 性能根因 — 连接复用/视频轮询脏检查/图懒加载/隐藏tab停轮询
- settings/base.py: MySQL 加 CONN_MAX_AGE=300 + 健康检查 + connect_timeout=5 (development/production 共用,production 经 from .base import * 继承);development 去重 - App.tsx pollVideosQuiet: 收尾 setProjectDetail 改 JSON 脏检查,在途段未变化时 跳过 setState,整棵管线不再每 5 秒空重渲染(纯前端,不碰生成业务) - ai-tools.tsx: 任务历史网格+列表两处 img 补 loading=lazy/decoding=async - pipeline.tsx: 审核(8s)+在途资产(4s)纯读轮询加 document.hidden 守卫 (视频5s轮询驱动生成,保守不加;详见进度文档) 验证: tsc 0 · django check 0 · 14 路由 headless boot 0 报错 · 登录 726ms 无假延迟无邮箱 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
afa8e07154
commit
8a0ae6a19d
@@ -0,0 +1,34 @@
|
||||
# 还原 + 性能落地 · 进度
|
||||
|
||||
> /loop 自主推进。每波结束本地存档(不 push)。计划:`~/.claude/plans/gleaming-sleeping-ullman.md`。
|
||||
> 两份审计 checklist:`UI还原对比报告-AirShelf-2026-06-19.md`、`性能审计报告-AirShelf-2026-06-19.md`。
|
||||
|
||||
---
|
||||
|
||||
## Wave 0 · 性能根因 — ✅ 完成 (2026-06-19)
|
||||
|
||||
| # | 项 | 状态 | 改动 / 证据 |
|
||||
|---|---|---|---|
|
||||
| 1 | MySQL 连接复用 | ✅ | `settings/base.py` 加 `CONN_MAX_AGE=300`+`CONN_HEALTH_CHECKS=True`+`connect_timeout=5`(mysql 分支),`development.py` 去重。production 经 `from .base import *` 自动继承。实测注入:`ENGINE=mysql / CONN_MAX_AGE=300 / HEALTH=True / OPTIONS.connect_timeout=5`。**收益最大、最低风险。** |
|
||||
| 2 | 视频轮询不再整页重渲染 | ✅ | `App.tsx` `pollVideosQuiet` 收尾 `setProjectDetail` 改 JSON 脏检查 —— 在途段未变化(多数 5s 轮次)时返回 `prev` 跳过 setState,整棵管线不再每 5 秒空重渲染。纯前端,不碰生成/脚本业务。 |
|
||||
| 3 | 图片懒加载 | ✅ | `ai-tools.tsx` 任务历史网格+列表两处 `<img>` 补 `loading="lazy" decoding="async"`。 |
|
||||
| 4 | 隐藏标签页暂停轮询 | ✅(保守) | `pipeline.tsx` 审核(8s)+ 基础资产在途(4s)两个**纯读**轮询 tick 起始加 `if (document.hidden) return`(回前台自然恢复)。 |
|
||||
|
||||
### Wave 0 有意偏离计划(已记录,非偷懒)
|
||||
- **视频 5s 轮询的 hidden-guard:跳过。** 该轮询在本机无 Celery 时**驱动视频生成推进**(前端 poll-video-segment),加 hidden-guard 会让切走标签时生成暂停 —— 触碰「轮询业务逻辑」(loop 规则 3 禁区)且改变行为。Task 2 的脏检查已消除它真正的性能问题(每 5s 整页重渲染),故 hidden-guard 非必要,保守不加。
|
||||
- **pending-assets「空闲 N 轮后停」:跳过。** 其重启触发不在 effect 依赖里,停了之后用户在该趴新触发的生成将拿不到 loading 占位卡(回归风险)。只加 hidden-guard 已解决「后台标签空跑」的性能点。
|
||||
- **products/projects 服务端分页:挪到 Wave 1 S7。** 服务端分页必须配可用的分页器(翻页 UI)才不会把「第 21 条以后」彻底锁死;裸上服务端分页而无分页器 = 页面更坏。S7 正是建富分页器,两者合并做才连贯。per-product / ai-tools 的 `pageSize:200` 是有界上限,叠加本波 lazy-img 已可接受,届时一并接服务端分页。
|
||||
|
||||
### Wave 0 验证
|
||||
- `npx tsc --noEmit` → **exit 0**
|
||||
- `python manage.py check` → **0 issues**;DB 设置实测确认 CONN_MAX_AGE 生效
|
||||
- 无头浏览器(playwright/chromium,注入 `airshelf_token`)走查 **14 条 authed 路由全部 boot,0 console/page error**(证 App.tsx/pipeline.tsx/ai-tools.tsx 改动无运行时回归)
|
||||
- 登录探针:**用户名字段在、无邮箱字段、点击→/dashboard 726ms**(真·API+水合,无人为延迟)
|
||||
- 截图存档:`_qa_shots/wave0/*.png`(14 路由 + after-login)
|
||||
- 注:Wave 0 改动均为非视觉(设置/轮询/懒加载),pixelmatch 预期 ~0 delta,逐页像素对比留到对应视觉波次(Wave 1/3)做。
|
||||
|
||||
---
|
||||
|
||||
## Wave 1 · 系统性 CSS/组件 (S1-S9) — ⏳ 进行中
|
||||
|
||||
(待补)
|
||||
Reference in New Issue
Block a user