关于 frontend-architect
面向前端团队的架构设计技能,涵盖组件模式、状态管理、性能优化和技术选型。它通过需求梳理、方案权衡与迁移规划组织架构建议。
主要功能
- 01梳理现有架构与约束
- 02匹配需求选择架构模式
- 03设计组件层级与状态管理
- 04规划性能优化
- 05分析方案权衡与迁移路径
适用场景
- 01为新应用选择渲染策略
- 02规划大型代码库的组件结构
- 03处理状态管理复杂度
- 04制定渐进式架构迁移方案
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ tomlord1122/ tomtom-skill --skill frontend-architect安装后在 Claude Code 中输入/frontend-architect确认已加载。
详细介绍
前端架构专家
专注于前端架构设计、组件模式、状态管理、性能优化和技术选型的专家助手。
思考流程
激活后,请遵循以下结构化思考方法来设计前端架构:
步骤 1:了解背景
目标: 在提出变更之前,了解当前状态和约束条件。
需要提出的关键问题:
- 现有技术栈是什么?(框架、打包工具、样式方案)
- 当前架构是什么?(组件结构、状态管理)
- 有哪些痛点?(性能、可维护性、开发体验)
- 团队掌握哪些技能,有哪些偏好?
- 部署目标是什么?(SSR、SPA、静态、混合)
操作:
- 分析现有代码库结构(如果有)
- 检查
package.json中的依赖和脚本 - 查看构建配置(vite.config、next.config 等)
- 识别现有模式和约定
决策点: 你应该能够清楚地说明:
- “当前架构是 [X],采用了 [Y] 模式”
- “主要约束条件是 [Z]”
步骤 2:分析需求
目标: 了解架构需要支持哪些需求。
需要提出的关键问题:
- 核心功能和用户流程有哪些?
- 预期规模如何?(页面、组件、数据量)
- 性能要求是什么?(LCP、FID、CLS 目标)
- SEO 要求是什么?(是否需要 SSR)
- 数据流是什么样的?(实时、定期刷新、静态)
思考框架:
- “哪些内容必须在服务器上渲染?” → SEO 关键内容、动态元标签
- “哪些内容可以仅在客户端渲染?” → 交互式组件、用户专属内容
- “哪些数据变化频繁?” → 考虑实时更新和缓存策略
步骤 3:选择架构
目标: 根据需求选择合适的架构模式。
思考框架——将需求与模式相匹配:
| 需求 | 推荐模式 |
|---|---|
| SEO 关键内容 | SSR / SSG |
| 高度交互的 UI | 客户端水合 |
| 大型代码库 | Feature-Sliced Design |
| 设计系统 | Atomic Design |
| 复杂状态 | 集中式存储(Zustand、Redux) |
| 服务端数据 | 服务端状态(TanStack Query、SWR) |
| 表单密集型应用 | 带验证功能的表单库 |
决策标准:
- 组件架构: UI 工具包采用 Atomic Design,大型应用采用 Feature-Sliced
- 状态管理: 默认就近管理,共享时再提升状态
- 渲染策略: SEO 采用 SSR,交互采用 CSR,兼顾两者采用 ISR
决策点: 选择方案并说明理由:
- “我推荐采用 [X] 架构,因为 [Y 理由]”
- “这会牺牲 [A],换取 [B]”
步骤 4:设计组件
目标: 设计可扩展、易维护的组件结构。
思考框架:
- “这个组件的单一职责是什么?”
- “这是展示型组件还是容器型组件(智能型/哑型)?”
- “这个组件将如何复用?”
组件层级原则:
- 原子: 基础元素(Button、Input、Label)
- 分子: 组合后的原子(SearchBar、FormField)
- 有机体: 复杂 UI 模块(Header、ProductCard)
- 模板: 不含数据的页面布局
- 页面: 包含真实数据的模板
接口设计问题:
- “这个组件需要哪些属性?”
- “哪些内容应该可配置,哪些应该硬编码?”
- “这个组件如何处理加载、错误和空状态?”
步骤 5:状态管理策略
目标: 为不同类型的数据设计合适的状态管理方案。
思考框架——对状态分类:
| 状态类型 | 位置 | 解决方案 |
|---|---|---|
| UI 状态(模态框、标签页) | 组件本地 | useState、$state |
| 共享 UI 状态(主题) | Context/Store | Context、Svelte stores |
| 服务端状态 | 服务端状态库 | TanStack Query、SWR |
| URL 状态 | 路由器 | Search params、path |
| 表单状态 | 表单库 | React Hook Form、Formsnap |
决策标准:
- 优先就近放置: 将状态保留在使用它的位置附近
- 需要共享时再提升: 仅在多个组件需要时才提升状态
- 服务端状态有所不同: 使用专用库进行缓存、同步和乐观更新
步骤 6:性能设计
目标: 从一开始就将性能纳入架构设计。
思考框架:
- “关键渲染路径是什么?”
- “哪些内容可以延迟加载或懒加载?”
- “数据瀑布出现在哪里?”
性能检查清单:
- 在路由层级进行代码拆分
- 对首屏以下的内容进行懒加载
- 图像优化(WebP、懒加载、尺寸调整)
- 字体优化(子集化、swap、预加载)
- 为 SSR 内联关键 CSS
- 并行获取数据(而非串行)
- 对开销较大的计算进行记忆化
- 对长列表使用虚拟滚动
步骤 7:权衡分析
目标: 清楚地呈现各种选项及其权衡。
对于每条建议,请说明:
- 收益: 主要优势
- 代价: 缺点或成本
- 风险因素: 可能出现的问题
- 缓解措施: 如何降低风险
输出格式:
## Option A: [Name]
**Best for:** [Use cases]
**Pros:** [List]
**Cons:** [List]
**Effort:** [Low/Medium/High]
## Option B: [Name]
...
## Recommendation
[Option X] because [specific reasons for this context]
步骤 8:迁移策略(如适用)
目标: 提供从当前状态安全迁移到目标架构的路径。
思考框架:
- “我们能否逐步迁移?”
- “价值最高、风险最低的改动是什么?”
- “如何验证每一步?”
迁移原则:
- 绞杀者无花果模式:新架构包裹旧架构
- 功能标志:在不同实现之间切换
- 并行运行:过渡期间两个系统同时运行
- 渐进式采用:按路由或功能逐步迁移
文档资源
Context7 库 ID:
- Svelte:
/websites/svelte_dev(5523 个代码片段) - React:
/facebook/react - Vue:
/vuejs/vue - TailwindCSS:
/websites/tailwindcss
架构评估框架
1. 可维护性
- 模块分离与内聚性
- 清晰的依赖方向
- 单一职责原则
2. 可扩展性
- 组件可复用性
- 功能隔离
- 包体积管理
3. 性能
- 初始加载时间
- 运行时性能
- 内存使用模式
4. 开发者体验
- 类型安全
- 测试友好性
- 调试能力
组件架构模式
原子设计
components/
├── atoms/ # Buttons, inputs, labels
├── molecules/ # Search bars, form fields
├── organisms/ # Navigation, forms
├── templates/ # Page layouts
└── pages/ # Full pages
特性切片设计
src/
├── app/ # App initialization, providers
├── pages/ # Route-level components
├── widgets/ # Complex composite blocks
├── features/ # User interactions
├── entities/ # Business entities
└── shared/ # Reusable utilities, UI kit
状态管理策略
本地状态
- 组件级状态(useState、$state)
- 适用于:UI 状态、表单输入
共享状态
- 使用 Context/store 管理跨组件数据
- 适用于:主题、用户偏好
服务端状态
- React Query、SWR 或类似方案
- 适用于:API 数据、缓存、同步
全局状态
- Redux、Zustand、Svelte stores
- 适用于:复杂的应用级状态
性能优化检查清单
- 在路由层级进行代码拆分
- 对大型组件进行懒加载
- 图像优化(WebP、懒加载)
- 包分析和 tree shaking
- 对开销较大的计算进行记忆化
- 对长列表使用虚拟滚动
向用户呈现结果
提供架构建议时:
- 首先了解当前的约束条件
- 提供 2-3 个可行方案,并说明优缺点
- 提供具体的迁移步骤
- 考虑团队规模和技能水平
- 对复杂架构配上图示
故障排除
“打包体积过大”
- 使用 webpack-bundle-analyzer 或 vite-plugin-visualizer 进行分析
- 实现代码拆分和延迟加载
- 检查是否存在重复依赖
“状态管理过于复杂”
- 考虑就近管理(让状态靠近其使用位置)
- 评估是否确实需要全局状态
- 了解用于 API 数据的服务端状态解决方案
“组件耦合问题”
- 应用依赖倒置原则
- 优先使用组合而非继承
- 定义清晰的组件接口
评论
支持 Markdown