Initial TrueGrowth source import
This commit is contained in:
47
openspec/changes/refactor-startup-shell-loading/design.md
Normal file
47
openspec/changes/refactor-startup-shell-loading/design.md
Normal file
@@ -0,0 +1,47 @@
|
||||
## Context
|
||||
|
||||
- 当前 `apps/web` 首次访问时,入口 JS 与 CSS 体积过大,且 `Drawnix` 把聊天、AI、工具窗、同步、性能面板、任务恢复等能力一并放入首屏链路。
|
||||
- 现有 Service Worker 已支持后台 precache,但主要改善二次访问,对首次访问帮助有限。
|
||||
|
||||
## Goals / Non-Goals
|
||||
|
||||
- Goals:
|
||||
- 让用户尽快进入可操作画布
|
||||
- 非核心能力改为未触发不挂载,并在 idle 或首次使用时加载
|
||||
- 保留当前 SW 的 precache 机制,并新增一层空闲预取
|
||||
- Non-Goals:
|
||||
- 不重做白板核心交互
|
||||
- 不新增用户可配置的性能开关
|
||||
- 不将用户媒体或任务结果纳入 idle 预取
|
||||
|
||||
## Decisions
|
||||
|
||||
- Decision: 维持 `Drawnix` 作为对外组件,但把非核心 UI 与启动副作用挪入独立的延后层组件。
|
||||
- Alternatives considered: 直接整体 `lazy(() => import('./drawnix'))`
|
||||
- Why not chosen: 会把“进入画布”与“加载整套 UI”继续绑死,无法精细控制首屏与延后能力边界。
|
||||
- Decision: 为 `@drawnix/drawnix` 增加 `runtime` 子入口,供 `main.tsx` 与 `app.tsx` 读取启动/工作区服务。
|
||||
- Alternatives considered: 继续从根 barrel 导出运行时服务
|
||||
- Why not chosen: 难以稳定隔离启动服务与 UI 图谱。
|
||||
- Decision: 通过 `manualChunks + idle-prefetch-manifest` 管理高频延后模块。
|
||||
- Alternatives considered: 只依赖 Rollup 默认拆包
|
||||
- Why not chosen: 无法稳定产出可校验、可预取的 chunk 分组。
|
||||
|
||||
## Risks / Trade-offs
|
||||
|
||||
- 非核心功能改为延后挂载后,首次点击聊天/工具/同步可能出现短暂局部 loading。
|
||||
- Mitigation: 首屏可操作后使用空闲预取高频组,并在用户第一次触发前尽量提前 warmup。
|
||||
- 任务恢复、自动插入画布等副作用延后后,恢复状态展示会稍晚。
|
||||
- Mitigation: 统一放入 idle 启动器,确保不会阻塞进入画布,但尽早补齐状态。
|
||||
- 过度拆包可能带来过多小请求。
|
||||
- Mitigation: 使用稳定的手动 chunk 分组,限制为少量高价值分组。
|
||||
|
||||
## Migration Plan
|
||||
|
||||
1. 新增 OpenSpec 变更与 `startup-performance` 需求定义。
|
||||
2. 拆分 `Drawnix` 壳层与延后层,迁移非核心 UI 与副作用。
|
||||
3. 为 Web 入口切换到 `runtime` 子入口。
|
||||
4. 为 Vite 与 SW 增加 manual chunk、idle prefetch manifest、预取消息处理与构建校验。
|
||||
|
||||
## Open Questions
|
||||
|
||||
- 无
|
||||
18
openspec/changes/refactor-startup-shell-loading/proposal.md
Normal file
18
openspec/changes/refactor-startup-shell-loading/proposal.md
Normal file
@@ -0,0 +1,18 @@
|
||||
# Change: Refactor Startup Shell Loading
|
||||
|
||||
## Why
|
||||
|
||||
当前首次访问的主入口包和样式包过大,且 `Drawnix` 在首屏同步挂载了大量非核心 UI 与后台副作用,导致用户进入可操作画布前等待较长。
|
||||
|
||||
## What Changes
|
||||
|
||||
- 拆分首屏画布壳层与延后功能层,非核心能力改为懒挂载或 idle 启动
|
||||
- 为 Web 入口新增运行时轻量导出边界,避免启动服务通过 UI barrel 进入首包
|
||||
- 为构建产物新增 `idle-prefetch-manifest.json` 与手动 chunk 分组
|
||||
- 为 Service Worker 增加空闲预取消息与高频懒加载资源缓存能力
|
||||
- 增加构建后校验脚本,守护首屏资源边界和入口体积
|
||||
|
||||
## Impact
|
||||
|
||||
- Affected specs: `startup-performance`
|
||||
- Affected code: `apps/web`, `packages/drawnix`, `apps/web/src/sw`, `scripts`
|
||||
@@ -0,0 +1,42 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 首屏只加载可进入画布所需资源
|
||||
|
||||
系统 SHALL 将首次进入画布所需的资源限制为 HTML、启动脚本、最小样式、白板核心渲染与当前工作区恢复。
|
||||
|
||||
#### Scenario: 首次打开页面进入画布
|
||||
|
||||
- **WHEN** 用户清空缓存后首次访问应用
|
||||
- **THEN** 页面先进入可操作画布
|
||||
- **AND** 聊天、AI 输入、工具窗、同步与性能面板不阻塞进入画布
|
||||
|
||||
### Requirement: 非核心能力必须延后挂载
|
||||
|
||||
系统 SHALL 将聊天、AI、工具窗、命令面板、画布搜索、同步、性能面板与相关后台副作用改为未触发不挂载,或在浏览器空闲时延后启动。
|
||||
|
||||
#### Scenario: 首次点击非核心能力
|
||||
|
||||
- **WHEN** 用户首次打开聊天抽屉、项目抽屉、工具箱、同步设置、命令面板或画布搜索
|
||||
- **THEN** 系统按需加载对应模块
|
||||
- **AND** 加载完成后功能可正常使用
|
||||
|
||||
### Requirement: Service Worker 支持空闲预取高频懒加载资源
|
||||
|
||||
系统 SHALL 在不影响当前会话的前提下,为高频懒加载模块提供空闲预取与缓存机制。
|
||||
|
||||
#### Scenario: 允许空闲预取
|
||||
|
||||
- **WHEN** 页面已经可操作,浏览器空闲,且网络不是省流量或慢网
|
||||
- **THEN** 页面可通知 Service Worker 预取高频懒加载 chunk
|
||||
- **AND** Service Worker 仅缓存版本化静态资源,不缓存用户媒体或任务结果
|
||||
|
||||
### Requirement: 构建结果必须可校验首屏边界
|
||||
|
||||
系统 SHALL 产出可校验的首屏资源边界,并提供自动检查脚本防止重模块回流到首包。
|
||||
|
||||
#### Scenario: 构建后校验入口资源
|
||||
|
||||
- **WHEN** 运行构建后首屏校验脚本
|
||||
- **THEN** 脚本会检查入口 HTML 直接引用的 JS/CSS 与入口脚本首屏动态导入的静态依赖链
|
||||
- **AND** 每个首屏 JS/CSS 资源的未压缩体积 SHALL 不超过 500KB
|
||||
- **AND** 若发现重模块 chunk 重新进入入口链路或首屏资源超出预算则返回失败
|
||||
17
openspec/changes/refactor-startup-shell-loading/tasks.md
Normal file
17
openspec/changes/refactor-startup-shell-loading/tasks.md
Normal file
@@ -0,0 +1,17 @@
|
||||
## 1. Startup Shell
|
||||
|
||||
- [x] 1.1 为 OpenSpec 新增 `refactor-startup-shell-loading` 变更文档
|
||||
- [x] 1.2 拆分 Drawnix 首屏壳层与延后功能层
|
||||
- [x] 1.3 将任务恢复、自动插入、字体/视频恢复等副作用迁移到 idle 启动器
|
||||
- [x] 1.4 调整 Web 入口运行时导入边界
|
||||
|
||||
## 2. Build & Prefetch
|
||||
|
||||
- [x] 2.1 配置 manual chunk 分组与 `idle-prefetch-manifest.json`
|
||||
- [x] 2.2 新增 `SW_PREFETCH_GROUPS` 处理与空闲预取逻辑
|
||||
- [x] 2.3 增加构建后首屏资源校验脚本
|
||||
|
||||
## 3. Verification
|
||||
|
||||
- [x] 3.1 运行 OpenSpec 校验
|
||||
- [x] 3.2 运行类型检查与构建,确认入口资源边界
|
||||
Reference in New Issue
Block a user