@mison/ag-kit-cn 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/.agent/.shared/ui-ux-pro-max/data/charts.csv +26 -0
  2. package/.agent/.shared/ui-ux-pro-max/data/colors.csv +97 -0
  3. package/.agent/.shared/ui-ux-pro-max/data/icons.csv +101 -0
  4. package/.agent/.shared/ui-ux-pro-max/data/landing.csv +31 -0
  5. package/.agent/.shared/ui-ux-pro-max/data/products.csv +97 -0
  6. package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +24 -0
  7. package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +45 -0
  8. package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  9. package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  10. package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  11. package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  12. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  13. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  14. package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  15. package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +54 -0
  16. package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  17. package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  18. package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  19. package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  20. package/.agent/.shared/ui-ux-pro-max/data/styles.csv +59 -0
  21. package/.agent/.shared/ui-ux-pro-max/data/typography.csv +58 -0
  22. package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  23. package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  24. package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +31 -0
  25. package/.agent/.shared/ui-ux-pro-max/scripts/core.py +258 -0
  26. package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +1067 -0
  27. package/.agent/.shared/ui-ux-pro-max/scripts/search.py +106 -0
  28. package/.agent/ARCHITECTURE.md +285 -0
  29. package/.agent/agents/backend-specialist.md +268 -0
  30. package/.agent/agents/code-archaeologist.md +106 -0
  31. package/.agent/agents/database-architect.md +225 -0
  32. package/.agent/agents/debugger.md +225 -0
  33. package/.agent/agents/devops-engineer.md +242 -0
  34. package/.agent/agents/documentation-writer.md +104 -0
  35. package/.agent/agents/explorer-agent.md +73 -0
  36. package/.agent/agents/frontend-specialist.md +618 -0
  37. package/.agent/agents/game-developer.md +162 -0
  38. package/.agent/agents/mobile-developer.md +382 -0
  39. package/.agent/agents/orchestrator.md +438 -0
  40. package/.agent/agents/penetration-tester.md +188 -0
  41. package/.agent/agents/performance-optimizer.md +187 -0
  42. package/.agent/agents/product-manager.md +112 -0
  43. package/.agent/agents/product-owner.md +95 -0
  44. package/.agent/agents/project-planner.md +405 -0
  45. package/.agent/agents/qa-automation-engineer.md +103 -0
  46. package/.agent/agents/security-auditor.md +170 -0
  47. package/.agent/agents/seo-specialist.md +111 -0
  48. package/.agent/agents/test-engineer.md +158 -0
  49. package/.agent/mcp_config.json +12 -0
  50. package/.agent/rules/GEMINI.md +273 -0
  51. package/.agent/scripts/auto_preview.py +148 -0
  52. package/.agent/scripts/checklist.py +217 -0
  53. package/.agent/scripts/session_manager.py +120 -0
  54. package/.agent/scripts/verify_all.py +327 -0
  55. package/.agent/skills/api-patterns/SKILL.md +84 -0
  56. package/.agent/skills/api-patterns/api-style.md +42 -0
  57. package/.agent/skills/api-patterns/auth.md +24 -0
  58. package/.agent/skills/api-patterns/documentation.md +26 -0
  59. package/.agent/skills/api-patterns/graphql.md +41 -0
  60. package/.agent/skills/api-patterns/rate-limiting.md +31 -0
  61. package/.agent/skills/api-patterns/response.md +37 -0
  62. package/.agent/skills/api-patterns/rest.md +40 -0
  63. package/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
  64. package/.agent/skills/api-patterns/security-testing.md +122 -0
  65. package/.agent/skills/api-patterns/trpc.md +41 -0
  66. package/.agent/skills/api-patterns/versioning.md +22 -0
  67. package/.agent/skills/app-builder/SKILL.md +75 -0
  68. package/.agent/skills/app-builder/agent-coordination.md +74 -0
  69. package/.agent/skills/app-builder/feature-building.md +53 -0
  70. package/.agent/skills/app-builder/project-detection.md +34 -0
  71. package/.agent/skills/app-builder/scaffolding.md +118 -0
  72. package/.agent/skills/app-builder/tech-stack.md +40 -0
  73. package/.agent/skills/app-builder/templates/SKILL.md +39 -0
  74. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  75. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  76. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  77. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  78. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  79. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  80. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  81. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
  82. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
  83. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
  84. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
  85. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  86. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
  87. package/.agent/skills/architecture/SKILL.md +57 -0
  88. package/.agent/skills/architecture/context-discovery.md +43 -0
  89. package/.agent/skills/architecture/examples.md +94 -0
  90. package/.agent/skills/architecture/pattern-selection.md +68 -0
  91. package/.agent/skills/architecture/patterns-reference.md +50 -0
  92. package/.agent/skills/architecture/trade-off-analysis.md +77 -0
  93. package/.agent/skills/bash-linux/SKILL.md +201 -0
  94. package/.agent/skills/behavioral-modes/SKILL.md +264 -0
  95. package/.agent/skills/brainstorming/SKILL.md +164 -0
  96. package/.agent/skills/brainstorming/dynamic-questioning.md +359 -0
  97. package/.agent/skills/clean-code/SKILL.md +200 -0
  98. package/.agent/skills/code-review-checklist/SKILL.md +125 -0
  99. package/.agent/skills/database-design/SKILL.md +54 -0
  100. package/.agent/skills/database-design/database-selection.md +43 -0
  101. package/.agent/skills/database-design/indexing.md +39 -0
  102. package/.agent/skills/database-design/migrations.md +50 -0
  103. package/.agent/skills/database-design/optimization.md +36 -0
  104. package/.agent/skills/database-design/orm-selection.md +30 -0
  105. package/.agent/skills/database-design/schema-design.md +56 -0
  106. package/.agent/skills/database-design/scripts/schema_validator.py +172 -0
  107. package/.agent/skills/deployment-procedures/SKILL.md +241 -0
  108. package/.agent/skills/doc.md +177 -0
  109. package/.agent/skills/documentation-templates/SKILL.md +194 -0
  110. package/.agent/skills/frontend-design/SKILL.md +418 -0
  111. package/.agent/skills/frontend-design/animation-guide.md +331 -0
  112. package/.agent/skills/frontend-design/color-system.md +307 -0
  113. package/.agent/skills/frontend-design/decision-trees.md +418 -0
  114. package/.agent/skills/frontend-design/motion-graphics.md +306 -0
  115. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  116. package/.agent/skills/frontend-design/scripts/ux_audit.py +727 -0
  117. package/.agent/skills/frontend-design/typography-system.md +345 -0
  118. package/.agent/skills/frontend-design/ux-psychology.md +1118 -0
  119. package/.agent/skills/frontend-design/visual-effects.md +383 -0
  120. package/.agent/skills/game-development/2d-games/SKILL.md +119 -0
  121. package/.agent/skills/game-development/3d-games/SKILL.md +135 -0
  122. package/.agent/skills/game-development/SKILL.md +167 -0
  123. package/.agent/skills/game-development/game-art/SKILL.md +185 -0
  124. package/.agent/skills/game-development/game-audio/SKILL.md +190 -0
  125. package/.agent/skills/game-development/game-design/SKILL.md +129 -0
  126. package/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
  127. package/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
  128. package/.agent/skills/game-development/pc-games/SKILL.md +144 -0
  129. package/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
  130. package/.agent/skills/game-development/web-games/SKILL.md +150 -0
  131. package/.agent/skills/geo-fundamentals/SKILL.md +155 -0
  132. package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
  133. package/.agent/skills/i18n-localization/SKILL.md +154 -0
  134. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  135. package/.agent/skills/intelligent-routing/SKILL.md +335 -0
  136. package/.agent/skills/lint-and-validate/SKILL.md +44 -0
  137. package/.agent/skills/lint-and-validate/scripts/lint_runner.py +184 -0
  138. package/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -0
  139. package/.agent/skills/mcp-builder/SKILL.md +176 -0
  140. package/.agent/skills/mobile-design/SKILL.md +394 -0
  141. package/.agent/skills/mobile-design/decision-trees.md +516 -0
  142. package/.agent/skills/mobile-design/mobile-backend.md +491 -0
  143. package/.agent/skills/mobile-design/mobile-color-system.md +420 -0
  144. package/.agent/skills/mobile-design/mobile-debugging.md +122 -0
  145. package/.agent/skills/mobile-design/mobile-design-thinking.md +355 -0
  146. package/.agent/skills/mobile-design/mobile-navigation.md +458 -0
  147. package/.agent/skills/mobile-design/mobile-performance.md +767 -0
  148. package/.agent/skills/mobile-design/mobile-testing.md +356 -0
  149. package/.agent/skills/mobile-design/mobile-typography.md +432 -0
  150. package/.agent/skills/mobile-design/platform-android.md +666 -0
  151. package/.agent/skills/mobile-design/platform-ios.md +561 -0
  152. package/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -0
  153. package/.agent/skills/mobile-design/touch-psychology.md +537 -0
  154. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +311 -0
  155. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +241 -0
  156. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +489 -0
  157. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +263 -0
  158. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
  159. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +431 -0
  160. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +683 -0
  161. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +149 -0
  162. package/.agent/skills/nextjs-react-expert/SKILL.md +286 -0
  163. package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
  164. package/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
  165. package/.agent/skills/nodejs-best-practices/SKILL.md +333 -0
  166. package/.agent/skills/parallel-agents/SKILL.md +194 -0
  167. package/.agent/skills/performance-profiling/SKILL.md +149 -0
  168. package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
  169. package/.agent/skills/plan-writing/SKILL.md +152 -0
  170. package/.agent/skills/powershell-windows/SKILL.md +166 -0
  171. package/.agent/skills/python-patterns/SKILL.md +441 -0
  172. package/.agent/skills/red-team-tactics/SKILL.md +203 -0
  173. package/.agent/skills/rust-pro/SKILL.md +190 -0
  174. package/.agent/skills/seo-fundamentals/SKILL.md +135 -0
  175. package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +215 -0
  176. package/.agent/skills/server-management/SKILL.md +161 -0
  177. package/.agent/skills/systematic-debugging/SKILL.md +114 -0
  178. package/.agent/skills/tailwind-patterns/SKILL.md +269 -0
  179. package/.agent/skills/tdd-workflow/SKILL.md +149 -0
  180. package/.agent/skills/testing-patterns/SKILL.md +178 -0
  181. package/.agent/skills/testing-patterns/scripts/test_runner.py +219 -0
  182. package/.agent/skills/vulnerability-scanner/SKILL.md +276 -0
  183. package/.agent/skills/vulnerability-scanner/checklists.md +131 -0
  184. package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +459 -0
  185. package/.agent/skills/web-design-guidelines/SKILL.md +57 -0
  186. package/.agent/skills/webapp-testing/SKILL.md +187 -0
  187. package/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -0
  188. package/.agent/workflows/brainstorm.md +113 -0
  189. package/.agent/workflows/create.md +59 -0
  190. package/.agent/workflows/debug.md +103 -0
  191. package/.agent/workflows/deploy.md +176 -0
  192. package/.agent/workflows/enhance.md +63 -0
  193. package/.agent/workflows/orchestrate.md +242 -0
  194. package/.agent/workflows/plan.md +89 -0
  195. package/.agent/workflows/preview.md +80 -0
  196. package/.agent/workflows/restore-localize-compat.md +525 -0
  197. package/.agent/workflows/status.md +86 -0
  198. package/.agent/workflows/test.md +144 -0
  199. package/.agent/workflows/ui-ux-pro-max.md +295 -0
  200. package/AGENT_FLOW.md +609 -0
  201. package/CHANGELOG.md +68 -0
  202. package/LICENSE +21 -0
  203. package/README.md +260 -0
  204. package/bin/adapters/base.js +63 -0
  205. package/bin/adapters/codex.js +391 -0
  206. package/bin/adapters/gemini.js +137 -0
  207. package/bin/ag-kit.js +1336 -0
  208. package/bin/core/builder.js +80 -0
  209. package/bin/core/generator.js +59 -0
  210. package/bin/core/resource-loader.js +64 -0
  211. package/bin/core/transformer.js +208 -0
  212. package/bin/interactive.js +65 -0
  213. package/bin/utils/atomic-writer.js +97 -0
  214. package/bin/utils/git-helper.js +68 -0
  215. package/bin/utils/managed-block.js +65 -0
  216. package/bin/utils/manifest.js +241 -0
  217. package/bin/utils.js +82 -0
  218. package/docs/codex-rules-template.md +36 -0
  219. package/docs/mapping-spec.md +68 -0
  220. package/docs/multi-target-adapter.md +80 -0
  221. package/docs/official/README.md +53 -0
  222. package/docs/official/antigravity/agent-modes-settings.md +64 -0
  223. package/docs/official/antigravity/rules-workflows.md +96 -0
  224. package/docs/official/antigravity/skills.md +147 -0
  225. package/docs/official/codex/agents-md.md +119 -0
  226. package/docs/official/codex/config-advanced.md +358 -0
  227. package/docs/official/codex/config-basic.md +141 -0
  228. package/docs/official/codex/config-reference.md +223 -0
  229. package/docs/official/codex/config-sample.md +216 -0
  230. package/docs/official/codex/mcp.md +107 -0
  231. package/docs/official/codex/rules.md +79 -0
  232. package/docs/official/codex/skills.md +114 -0
  233. package/docs/official/sources-index.md +32 -0
  234. package/docs/operations.md +145 -0
  235. package/docs/terminology-style-guide.md +69 -0
  236. package/package.json +51 -0
  237. package/scripts/postinstall-check.js +112 -0
@@ -0,0 +1,767 @@
1
+ # 移动端性能参考(Mobile Performance Reference)
2
+
3
+ > 深入覆盖 React Native 与 Flutter 的性能优化、60fps 动画、内存管理与电量因素。
4
+ > **这是 AI 代码最容易失败的第一大领域。**
5
+
6
+ ---
7
+
8
+ ## 1. 移动端性能思维(The Mobile Performance Mindset)
9
+
10
+ ### 为什么移动端性能不同(Why Mobile Performance is Different)
11
+
12
+ ```
13
+ DESKTOP: MOBILE:
14
+ ├── 计算资源充足 ├── 电量是硬限制
15
+ ├── RAM 相对充裕 ├── RAM 共享且有限
16
+ ├── 网络相对稳定 ├── 网络不可靠
17
+ ├── CPU 持续可用 ├── 高温降频
18
+ └── 用户仍期望快 └── 用户期待“即时响应”
19
+ ```
20
+
21
+ ### 性能预算概念(Performance Budget Concept)
22
+
23
+ ```
24
+ 每一帧必须在以下时间内完成:
25
+ ├── 60fps → 16.67ms/帧
26
+ ├── 120fps(ProMotion)→ 8.33ms/帧
27
+
28
+ 如果代码超时:
29
+ ├── 掉帧 → 滚动/动画卡顿
30
+ ├── 用户感知为“慢/坏”
31
+ └── 他们会卸载 App
32
+ ```
33
+
34
+ ---
35
+
36
+ ## 2. React Native 性能(React Native Performance)
37
+
38
+ ### 🚫 AI 最大错误:用 ScrollView 渲染列表
39
+
40
+ ```javascript
41
+ // ❌ 千万别这样做(AI 最常犯错)
42
+ <ScrollView>
43
+ {items.map(item => (
44
+ <ItemComponent key={item.id} item={item} />
45
+ ))}
46
+ </ScrollView>
47
+
48
+ // 为什么灾难性:
49
+ // ├── 一次性渲染所有项目(1000 条 = 1000 次渲染)
50
+ // ├── 内存暴涨
51
+ // ├── 首屏渲染要等很久
52
+ // └── 滚动严重卡顿
53
+
54
+ // ✅ 必须使用 FlatList
55
+ <FlatList
56
+ data={items}
57
+ renderItem={renderItem}
58
+ keyExtractor={item => item.id}
59
+ />
60
+ ```
61
+
62
+ ### FlatList 优化清单(FlatList Optimization Checklist)
63
+
64
+ ```javascript
65
+ // ✅ 正确示例:关键优化全部启用
66
+
67
+ // 1. 列表项组件 memo 化
68
+ const ListItem = React.memo(({ item }: { item: Item }) => {
69
+ return (
70
+ <Pressable style={styles.item}>
71
+ <Text>{item.title}</Text>
72
+ </Pressable>
73
+ );
74
+ });
75
+
76
+ // 2. renderItem 使用 useCallback
77
+ const renderItem = useCallback(
78
+ ({ item }: { item: Item }) => <ListItem item={item} />,
79
+ [] // 空依赖 = 不重建
80
+ );
81
+
82
+ // 3. keyExtractor 稳定(不要用 index)
83
+ const keyExtractor = useCallback((item: Item) => item.id, []);
84
+
85
+ // 4. 固定高度时提供 getItemLayout
86
+ const getItemLayout = useCallback(
87
+ (data: Item[] | null, index: number) => ({
88
+ length: ITEM_HEIGHT,
89
+ offset: ITEM_HEIGHT * index,
90
+ index,
91
+ }),
92
+ []
93
+ );
94
+
95
+ // 5. 应用于 FlatList
96
+ <FlatList
97
+ data={items}
98
+ renderItem={renderItem}
99
+ keyExtractor={keyExtractor}
100
+ getItemLayout={getItemLayout}
101
+ // 性能相关参数
102
+ removeClippedSubviews={true} // Android:移除屏外视图
103
+ maxToRenderPerBatch={10} // 每批渲染数量
104
+ windowSize={5} // 渲染窗口(5=前后各 2 屏)
105
+ initialNumToRender={10} // 首屏渲染数量
106
+ updateCellsBatchingPeriod={50} // 批处理间隔
107
+ />
108
+ ```
109
+
110
+ ### 每项优化的意义(Why Each Optimization Matters)
111
+
112
+ | 优化项(Optimization) | 防止的问题(What It Prevents) | 影响(Impact) |
113
+ |------------------------|---------------------------------|----------------|
114
+ | `React.memo` | 父组件变化导致重复渲染 | 🔴 Critical |
115
+ | `useCallback renderItem` | 每次 render 生成新函数 | 🔴 Critical |
116
+ | 稳定 `keyExtractor` | 列表复用错位 | 🔴 Critical |
117
+ | `getItemLayout` | 异步布局计算 | 🟡 High |
118
+ | `removeClippedSubviews` | 屏外内存堆积 | 🟡 High |
119
+ | `maxToRenderPerBatch` | 主线程阻塞 | 🟢 Medium |
120
+ | `windowSize` | 过高内存占用 | 🟢 Medium |
121
+
122
+ ### FlashList:更好的选择
123
+
124
+ ```javascript
125
+ // 大型列表推荐使用 FlashList
126
+ import { FlashList } from "@shopify/flash-list";
127
+
128
+ <FlashList
129
+ data={items}
130
+ renderItem={renderItem}
131
+ estimatedItemSize={ITEM_HEIGHT}
132
+ keyExtractor={keyExtractor}
133
+ />
134
+
135
+ // 相对 FlatList 的优势:
136
+ // ├── 复用更高效
137
+ // ├── 内存管理更好
138
+ // ├── API 更简洁
139
+ // └── 需要的优化参数更少
140
+ ```
141
+
142
+ ### 动画性能(Animation Performance)
143
+
144
+ ```javascript
145
+ // ❌ JS 线程驱动动画(会阻塞)
146
+ Animated.timing(value, {
147
+ toValue: 1,
148
+ duration: 300,
149
+ useNativeDriver: false, // BAD!
150
+ }).start();
151
+
152
+ // ✅ Native driver 动画(UI 线程)
153
+ Animated.timing(value, {
154
+ toValue: 1,
155
+ duration: 300,
156
+ useNativeDriver: true, // GOOD!
157
+ }).start();
158
+
159
+ // Native driver 只支持:
160
+ // ├── transform(translate、scale、rotate)
161
+ // └── opacity
162
+ //
163
+ // 不支持:
164
+ // ├── width、height
165
+ // ├── backgroundColor
166
+ // ├── borderRadius 变化
167
+ // └── margin、padding
168
+ ```
169
+
170
+ ### 复杂动画用 Reanimated
171
+
172
+ ```javascript
173
+ // Native driver 不支持的场景,用 Reanimated 3
174
+
175
+ import Animated, {
176
+ useSharedValue,
177
+ useAnimatedStyle,
178
+ withSpring,
179
+ } from 'react-native-reanimated';
180
+
181
+ const Component = () => {
182
+ const offset = useSharedValue(0);
183
+
184
+ const animatedStyles = useAnimatedStyle(() => ({
185
+ transform: [{ translateX: withSpring(offset.value) }],
186
+ }));
187
+
188
+ return <Animated.View style={animatedStyles} />;
189
+ };
190
+
191
+ // 优势:
192
+ // ├── UI 线程运行(60fps)
193
+ // ├── 几乎所有属性可动画化
194
+ // ├── 手势驱动动画
195
+ // └── Worklets 支持复杂逻辑
196
+ ```
197
+
198
+ ### 内存泄漏预防(Memory Leak Prevention)
199
+
200
+ ```javascript
201
+ // ❌ 内存泄漏:未清理 interval
202
+ useEffect(() => {
203
+ const interval = setInterval(() => {
204
+ fetchData();
205
+ }, 5000);
206
+ // 缺少 cleanup!
207
+ }, []);
208
+
209
+ // ✅ 正确清理
210
+ useEffect(() => {
211
+ const interval = setInterval(() => {
212
+ fetchData();
213
+ }, 5000);
214
+
215
+ return () => clearInterval(interval); // CLEANUP!
216
+ }, []);
217
+
218
+ // 常见泄漏来源:
219
+ // ├── Timers(setInterval、setTimeout)
220
+ // ├── Event listeners
221
+ // ├── Subscriptions(WebSocket、PubSub)
222
+ // ├── 卸载后仍更新状态的异步操作
223
+ // └── 不受限的图片缓存
224
+ ```
225
+
226
+ ### React Native 性能检查清单
227
+
228
+ ```markdown
229
+ ## 每个列表前
230
+ - [ ] 使用 FlatList 或 FlashList(不要用 ScrollView)
231
+ - [ ] renderItem 用 useCallback
232
+ - [ ] 列表项用 React.memo
233
+ - [ ] keyExtractor 使用稳定 ID(不要用 index)
234
+ - [ ] 固定高度时提供 getItemLayout
235
+
236
+ ## 每个动画前
237
+ - [ ] useNativeDriver: true(尽可能)
238
+ - [ ] 复杂动画使用 Reanimated
239
+ - [ ] 仅动画 transform/opacity
240
+ - [ ] 在低端 Android 设备测试
241
+
242
+ ## 发布前
243
+ - [ ] 清理 console.log
244
+ - [ ] 所有 useEffect 都有 cleanup
245
+ - [ ] 无内存泄漏(Profiler 检查)
246
+ - [ ] 在 release 包里测试(非 dev)
247
+ ```
248
+
249
+ ---
250
+
251
+ ## 3. Flutter 性能(Flutter Performance)
252
+
253
+ ### 🚫 AI 最大错误:滥用 setState
254
+
255
+ ```dart
256
+ // ❌ 错误:setState 会重建整棵 widget 树
257
+ class BadCounter extends StatefulWidget {
258
+ @override
259
+ State<BadCounter> createState() => _BadCounterState();
260
+ }
261
+
262
+ class _BadCounterState extends State<BadCounter> {
263
+ int _counter = 0;
264
+
265
+ void _increment() {
266
+ setState(() {
267
+ _counter++; // 下面所有内容都会重建!
268
+ });
269
+ }
270
+
271
+ @override
272
+ Widget build(BuildContext context) {
273
+ return Column(
274
+ children: [
275
+ Text('Counter: $_counter'),
276
+ ExpensiveWidget(), // 不必要重建
277
+ AnotherExpensiveWidget(), // 不必要重建
278
+ ],
279
+ );
280
+ }
281
+ }
282
+ ```
283
+
284
+ ### `const` 构造器革命(The `const` Constructor Revolution)
285
+
286
+ ```dart
287
+ // ✅ 正确:const 可避免重建
288
+
289
+ class GoodCounter extends StatefulWidget {
290
+ const GoodCounter({super.key}); // CONST 构造器!
291
+
292
+ @override
293
+ State<GoodCounter> createState() => _GoodCounterState();
294
+ }
295
+
296
+ class _GoodCounterState extends State<GoodCounter> {
297
+ int _counter = 0;
298
+
299
+ @override
300
+ Widget build(BuildContext context) {
301
+ return Column(
302
+ children: [
303
+ Text('Counter: $_counter'),
304
+ const ExpensiveWidget(), // 不会重建
305
+ const AnotherExpensiveWidget(), // 不会重建
306
+ ],
307
+ );
308
+ }
309
+ }
310
+
311
+ // 规则:所有不依赖状态的 widget 都应加 const
312
+ ```
313
+
314
+ ### 精准状态管理(Targeted State Management)
315
+
316
+ ```dart
317
+ // ❌ setState 重建全树
318
+ setState(() => _value = newValue);
319
+
320
+ // ✅ ValueListenableBuilder:局部重建
321
+ class TargetedState extends StatelessWidget {
322
+ final ValueNotifier<int> counter = ValueNotifier(0);
323
+
324
+ @override
325
+ Widget build(BuildContext context) {
326
+ return Column(
327
+ children: [
328
+ // 只有这部分会随 counter 改变
329
+ ValueListenableBuilder<int>(
330
+ valueListenable: counter,
331
+ builder: (context, value, child) => Text('$value'),
332
+ child: const Icon(Icons.star), // 不会重建
333
+ ),
334
+ const ExpensiveWidget(), // 永远不重建
335
+ ],
336
+ );
337
+ }
338
+ }
339
+ ```
340
+
341
+ ### Riverpod/Provider 最佳实践(Riverpod/Provider Best Practices)
342
+
343
+ ```dart
344
+ // ❌ 错误:在 build 中读取整个 provider
345
+ Widget build(BuildContext context) {
346
+ final state = ref.watch(myProvider); // 任意变化都会重建
347
+ return Text(state.name);
348
+ }
349
+
350
+ // ✅ 正确:只选择需要的字段
351
+ Widget build(BuildContext context) {
352
+ final name = ref.watch(myProvider.select((s) => s.name));
353
+ return Text(name); // 仅 name 变化才重建
354
+ }
355
+ ```
356
+
357
+ ### ListView 优化(ListView Optimization)
358
+
359
+ ```dart
360
+ // ❌ 错误:ListView 无 builder(一次性渲染)
361
+ ListView(
362
+ children: items.map((item) => ItemWidget(item)).toList(),
363
+ )
364
+
365
+ // ✅ 正确:ListView.builder(懒加载)
366
+ ListView.builder(
367
+ itemCount: items.length,
368
+ itemBuilder: (context, index) => ItemWidget(items[index]),
369
+ // 进一步优化:
370
+ itemExtent: 56, // 固定高度 = 更快布局
371
+ cacheExtent: 100, // 预渲染距离
372
+ )
373
+
374
+ // ✅ 更好:ListView.separated 适合分隔线
375
+ ListView.separated(
376
+ itemCount: items.length,
377
+ itemBuilder: (context, index) => ItemWidget(items[index]),
378
+ separatorBuilder: (context, index) => const Divider(),
379
+ )
380
+ ```
381
+
382
+ ### 图片优化(Image Optimization)
383
+
384
+ ```dart
385
+ // ❌ 错误:不缓存 + 原尺寸
386
+ Image.network(url)
387
+
388
+ // ✅ 正确:缓存 + 限尺寸
389
+ CachedNetworkImage(
390
+ imageUrl: url,
391
+ width: 100,
392
+ height: 100,
393
+ fit: BoxFit.cover,
394
+ memCacheWidth: 200, // 2x for retina
395
+ memCacheHeight: 200,
396
+ placeholder: (context, url) => const Skeleton(),
397
+ errorWidget: (context, url, error) => const Icon(Icons.error),
398
+ )
399
+ ```
400
+
401
+ ### Dispose 规范(Dispose Pattern)
402
+
403
+ ```dart
404
+ class MyWidget extends StatefulWidget {
405
+ @override
406
+ State<MyWidget> createState() => _MyWidgetState();
407
+ }
408
+
409
+ class _MyWidgetState extends State<MyWidget> {
410
+ late final StreamSubscription _subscription;
411
+ late final AnimationController _controller;
412
+ late final TextEditingController _textController;
413
+
414
+ @override
415
+ void initState() {
416
+ super.initState();
417
+ _subscription = stream.listen((_) {});
418
+ _controller = AnimationController(vsync: this);
419
+ _textController = TextEditingController();
420
+ }
421
+
422
+ @override
423
+ void dispose() {
424
+ // 始终按创建的逆序清理
425
+ _textController.dispose();
426
+ _controller.dispose();
427
+ _subscription.cancel();
428
+ super.dispose();
429
+ }
430
+
431
+ @override
432
+ Widget build(BuildContext context) => Container();
433
+ }
434
+ ```
435
+
436
+ ### Flutter 性能检查清单
437
+
438
+ ```markdown
439
+ ## 每个 Widget 前
440
+ - [ ] const 构造器已加(无运行时参数)
441
+ - [ ] 静态子节点使用 const
442
+ - [ ] setState 影响范围最小化
443
+ - [ ] Provider 读取使用 selector
444
+
445
+ ## 每个列表前
446
+ - [ ] 使用 ListView.builder(不要用 ListView children)
447
+ - [ ] 固定高度提供 itemExtent
448
+ - [ ] 图片缓存 + 尺寸限制
449
+
450
+ ## 每个动画前
451
+ - [ ] 使用 Impeller(Flutter 3.16+)
452
+ - [ ] 避免 Opacity(用 FadeTransition)
453
+ - [ ] AnimationController 使用 TickerProviderStateMixin
454
+
455
+ ## 发布前
456
+ - [ ] 所有 dispose() 已实现
457
+ - [ ] 生产环境移除 print()
458
+ - [ ] 在 profile/release 模式测试
459
+ - [ ] DevTools 性能叠层检查
460
+ ```
461
+
462
+ ---
463
+
464
+ ## 4. 动画性能(Animation Performance, Both Platforms)
465
+
466
+ ### 60fps 必达(The 60fps Imperative)
467
+
468
+ ```
469
+ 人眼感知:
470
+ ├── < 24 fps → 像幻灯片(坏)
471
+ ├── 24-30 fps → 明显卡顿
472
+ ├── 30-45 fps → 不够顺滑
473
+ ├── 45-60 fps → 可接受
474
+ ├── 60 fps → 丝滑(目标)
475
+ └── 120 fps → 高端(ProMotion)
476
+
477
+ 不要发布 < 60fps 的动画。
478
+ ```
479
+
480
+ ### GPU vs CPU 动画
481
+
482
+ ```
483
+ GPU 加速(快): CPU 计算(慢):
484
+ ├── transform: translate ├── width, height
485
+ ├── transform: scale ├── top, left, right, bottom
486
+ ├── transform: rotate ├── margin, padding
487
+ ├── opacity ├── border-radius(动画)
488
+ └──(合成层,离开主线程) └── box-shadow(动画)
489
+
490
+ 规则:只动画 transform 与 opacity,
491
+ 否则会触发 layout 重新计算。
492
+ ```
493
+
494
+ ### 动画时长参考(Animation Timing Guide)
495
+
496
+ | 动画类型(Animation Type) | 时长(Duration) | 缓动(Easing) |
497
+ |----------------------------|------------------|----------------|
498
+ | 微交互(Micro-interaction) | 100-200ms | ease-out |
499
+ | 标准过渡 | 200-300ms | ease-out |
500
+ | 页面过渡 | 300-400ms | ease-in-out |
501
+ | 复杂/戏剧化 | 400-600ms | ease-in-out |
502
+ | Skeleton Loading | 1000-1500ms | linear(循环) |
503
+
504
+ ### 弹簧物理(Spring Physics)
505
+
506
+ ```javascript
507
+ // React Native Reanimated
508
+ withSpring(targetValue, {
509
+ damping: 15, // 阻尼(越大越快停)
510
+ stiffness: 150, // 刚度(越大越紧)
511
+ mass: 1, // 质量
512
+ })
513
+
514
+ // Flutter
515
+ SpringSimulation(
516
+ SpringDescription(
517
+ mass: 1,
518
+ stiffness: 150,
519
+ damping: 15,
520
+ ),
521
+ start,
522
+ end,
523
+ velocity,
524
+ )
525
+
526
+ // 自然手感范围:
527
+ // Damping: 10-20(弹性到收敛)
528
+ // Stiffness: 100-200(松到紧)
529
+ // Mass: 0.5-2(轻到重)
530
+ ```
531
+
532
+ ---
533
+
534
+ ## 5. 内存管理(Memory Management)
535
+
536
+ ### 常见内存泄漏(Common Memory Leaks)
537
+
538
+ | 来源(Source) | 平台(Platform) | 解决方案(Solution) |
539
+ |----------------|------------------|----------------------|
540
+ | Timers | Both | cleanup/dispose 清理 |
541
+ | Event listeners | Both | cleanup/dispose 移除 |
542
+ | Subscriptions | Both | cleanup/dispose 取消 |
543
+ | Large images | Both | 限制缓存/尺寸 |
544
+ | Async after unmount | RN | isMounted 或 AbortController |
545
+ | Animation controllers | Flutter | dispose controllers |
546
+
547
+ ### 图片内存(Image Memory)
548
+
549
+ ```
550
+ 图片内存 = 宽 × 高 × 4 字节(RGBA)
551
+
552
+ 1080p 图片 = 1920 × 1080 × 4 = 8.3 MB
553
+ 4K 图片 = 3840 × 2160 × 4 = 33.2 MB
554
+
555
+ 10 张 4K = 332 MB → 直接崩溃
556
+
557
+ 规则:必须按显示尺寸加载(或 2-3x retina)。
558
+ ```
559
+
560
+ ### 内存 Profiling(Memory Profiling)
561
+
562
+ ```
563
+ React Native:
564
+ ├── Flipper → Memory tab
565
+ ├── Xcode Instruments(iOS)
566
+ └── Android Studio Profiler
567
+
568
+ Flutter:
569
+ ├── DevTools → Memory tab
570
+ ├── Observatory
571
+ └── flutter run --profile
572
+ ```
573
+
574
+ ---
575
+
576
+ ## 6. 电量优化(Battery Optimization)
577
+
578
+ ### 电量消耗来源(Battery Drain Sources)
579
+
580
+ | 来源(Source) | 影响(Impact) | 缓解(Mitigation) |
581
+ |----------------|----------------|--------------------|
582
+ | **屏幕常亮** | 🔴 Highest | OLED 下优先暗色 |
583
+ | **持续 GPS** | 🔴 Very high | 用 significant change 模式 |
584
+ | **网络请求** | 🟡 High | 批量请求 + 强缓存 |
585
+ | **动画** | 🟡 Medium | 低电量时降级 |
586
+ | **后台任务** | 🟡 Medium | 非关键延后处理 |
587
+ | **CPU 计算** | 🟢 Lower | 转到后端处理 |
588
+
589
+ ### OLED 省电原则(OLED Battery Saving)
590
+
591
+ ```
592
+ OLED:黑色像素 = 不发光 = 0 功耗
593
+
594
+ 暗色模式节能:
595
+ ├── 纯黑(#000000)→ 最大节能
596
+ ├── 深灰(#1a1a1a)→ 少量节能
597
+ ├── 彩色 → 一定功耗
598
+ └── 白色(#FFFFFF)→ 最大耗电
599
+
600
+ 规则:暗色模式背景尽量用纯黑。
601
+ ```
602
+
603
+ ### 后台任务准则(Background Task Guidelines)
604
+
605
+ ```
606
+ iOS:
607
+ ├── Background refresh:系统调度,频次受限
608
+ ├── Push notifications:重要更新才用
609
+ ├── Background modes:仅 Location/Audio/VoIP
610
+ └── Background tasks:最大约 30 秒
611
+
612
+ Android:
613
+ ├── WorkManager:系统调度、节能优先
614
+ ├── Foreground service:前台可见、持续运行
615
+ ├── JobScheduler:批量网络任务
616
+ └── Doze mode:必须遵守并批处理
617
+ ```
618
+
619
+ ---
620
+
621
+ ## 7. 网络性能(Network Performance)
622
+
623
+ ### 离线优先架构(Offline-First Architecture)
624
+
625
+ ```
626
+ ┌──────────────┐
627
+ │ UI │
628
+ └──────┬───────┘
629
+
630
+ ┌──────▼───────┐
631
+ │ Cache │ ← 先读缓存
632
+ └──────┬───────┘
633
+
634
+ ┌──────▼───────┐
635
+ │ Network │ ← 网络更新缓存
636
+ └──────────────┘
637
+
638
+ 收益:
639
+ ├── UI 秒开(缓存无需 loading)
640
+ ├── 支持离线
641
+ ├── 降低流量消耗
642
+ └── 慢网体验更好
643
+ ```
644
+
645
+ ### 请求优化(Request Optimization)
646
+
647
+ ```
648
+ BATCH:多请求合并
649
+ ├── 10 个小请求 → 1 个批量请求
650
+ ├── 降低连接开销
651
+ └── 电量更友好(无线模块只唤醒一次)
652
+
653
+ CACHE:不重复拉取无变化数据
654
+ ├── ETag/If-None-Match 头
655
+ ├── Cache-Control 头
656
+ └── Stale-while-revalidate 模式
657
+
658
+ COMPRESS:减少体积
659
+ ├── gzip/brotli
660
+ ├── 只请求必要字段(GraphQL)
661
+ └── 大列表必须分页
662
+ ```
663
+
664
+ ---
665
+
666
+ ## 8. 性能测试(Performance Testing)
667
+
668
+ ### 测什么(What to Test)
669
+
670
+ | 指标(Metric) | 目标(Target) | 工具(Tool) |
671
+ |----------------|----------------|--------------|
672
+ | **帧率** | ≥ 60fps | Performance overlay |
673
+ | **内存** | 稳定无增长 | Profiler |
674
+ | **冷启动** | < 2s | 手动计时 |
675
+ | **TTI** | < 3s | Lighthouse |
676
+ | **列表滚动** | 无卡顿 | 体感验证 |
677
+ | **动画顺滑** | 无掉帧 | Performance monitor |
678
+
679
+ ### 真实设备测试(Test on Real Devices)
680
+
681
+ ```
682
+ ⚠️ 永远不要只信:
683
+ ├── 模拟器/模拟机(远快于真机)
684
+ ├── Dev 模式(比 Release 慢)
685
+ ├── 只有高端设备
686
+
687
+ ✅ 必须覆盖:
688
+ ├── 低端 Android(<$200)
689
+ ├── 老 iOS 设备(iPhone 8 / SE)
690
+ ├── Release/Profile 构建
691
+ └── 真实数据(不是 10 条假数据)
692
+ ```
693
+
694
+ ### 性能监控清单(Performance Monitoring Checklist)
695
+
696
+ ```markdown
697
+ ## 开发中
698
+ - [ ] 开启性能叠层
699
+ - [ ] 关注掉帧
700
+ - [ ] 内存稳定
701
+ - [ ] 无性能警告
702
+
703
+ ## 发布前
704
+ - [ ] 低端设备实测
705
+ - [ ] 长时使用内存 Profiling
706
+ - [ ] 冷启动时间已测
707
+ - [ ] 列表 1000+ 条滚动测试
708
+ - [ ] 动画 60fps 测试
709
+ - [ ] 慢 3G 网络测试
710
+ ```
711
+
712
+ ---
713
+
714
+ ## 9. 速查卡(Quick Reference Card)
715
+
716
+ ### React Native Essentials
717
+
718
+ ```javascript
719
+ // 列表:必须使用
720
+ <FlatList
721
+ data={data}
722
+ renderItem={useCallback(({item}) => <MemoItem item={item} />, [])}
723
+ keyExtractor={useCallback(item => item.id, [])}
724
+ getItemLayout={useCallback((_, i) => ({length: H, offset: H*i, index: i}), [])}
725
+ />
726
+
727
+ // 动画:必须 native
728
+ useNativeDriver: true
729
+
730
+ // 清理:必须有 cleanup
731
+ useEffect(() => {
732
+ return () => cleanup();
733
+ }, []);
734
+ ```
735
+
736
+ ### Flutter Essentials
737
+
738
+ ```dart
739
+ // Widgets:必须 const
740
+ const MyWidget()
741
+
742
+ // Lists:必须 builder
743
+ ListView.builder(itemBuilder: ...)
744
+
745
+ // State:必须精准
746
+ ValueListenableBuilder() or ref.watch(provider.select(...))
747
+
748
+ // Dispose:必须清理
749
+ @override
750
+ void dispose() {
751
+ controller.dispose();
752
+ super.dispose();
753
+ }
754
+ ```
755
+
756
+ ### 动画目标(Animation Targets)
757
+
758
+ ```
759
+ Transform/Opacity only ← 可动画属性
760
+ 16.67ms per frame ← 时间预算
761
+ 60fps minimum ← 最低目标
762
+ Low-end Android ← 必测设备
763
+ ```
764
+
765
+ ---
766
+
767
+ > **记住(Remember)**:性能不是“优化项”,而是“基础质量”。慢 App 等于坏 App。请以用户最差的设备为标准,而不是你最好的设备。