@rotifer/playground 0.5.0-alpha.2 → 0.7.0

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 (316) hide show
  1. package/CHANGELOG.md +159 -15
  2. package/LICENSE +1 -1
  3. package/README.md +51 -23
  4. package/README.zh.md +54 -25
  5. package/dist/cloud/auth.d.ts +7 -1
  6. package/dist/cloud/auth.d.ts.map +1 -1
  7. package/dist/cloud/auth.js +65 -1
  8. package/dist/cloud/auth.js.map +1 -1
  9. package/dist/cloud/client.d.ts +4 -1
  10. package/dist/cloud/client.d.ts.map +1 -1
  11. package/dist/cloud/client.js +9 -2
  12. package/dist/cloud/client.js.map +1 -1
  13. package/dist/cloud/types.d.ts +3 -1
  14. package/dist/cloud/types.d.ts.map +1 -1
  15. package/dist/cloud/types.js.map +1 -1
  16. package/dist/commands/agent-create.d.ts.map +1 -1
  17. package/dist/commands/agent-create.js +66 -3
  18. package/dist/commands/agent-create.js.map +1 -1
  19. package/dist/commands/agent-run.d.ts.map +1 -1
  20. package/dist/commands/agent-run.js +296 -32
  21. package/dist/commands/agent-run.js.map +1 -1
  22. package/dist/commands/arena-submit.d.ts.map +1 -1
  23. package/dist/commands/arena-submit.js +45 -17
  24. package/dist/commands/arena-submit.js.map +1 -1
  25. package/dist/commands/compile.d.ts.map +1 -1
  26. package/dist/commands/compile.js +9 -3
  27. package/dist/commands/compile.js.map +1 -1
  28. package/dist/commands/init.d.ts.map +1 -1
  29. package/dist/commands/init.js +13 -3
  30. package/dist/commands/init.js.map +1 -1
  31. package/dist/commands/login.d.ts.map +1 -1
  32. package/dist/commands/login.js +23 -16
  33. package/dist/commands/login.js.map +1 -1
  34. package/dist/commands/network.js +4 -4
  35. package/dist/commands/network.js.map +1 -1
  36. package/dist/commands/publish.d.ts.map +1 -1
  37. package/dist/commands/publish.js +162 -44
  38. package/dist/commands/publish.js.map +1 -1
  39. package/dist/commands/test.d.ts.map +1 -1
  40. package/dist/commands/test.js +209 -23
  41. package/dist/commands/test.js.map +1 -1
  42. package/dist/commands/wrap.d.ts.map +1 -1
  43. package/dist/commands/wrap.js +17 -1
  44. package/dist/commands/wrap.js.map +1 -1
  45. package/dist/index.js +0 -0
  46. package/dist/runtime/network-gateway.d.ts +53 -0
  47. package/dist/runtime/network-gateway.d.ts.map +1 -0
  48. package/dist/runtime/network-gateway.js +147 -0
  49. package/dist/runtime/network-gateway.js.map +1 -0
  50. package/dist/utils/binding.d.ts +25 -0
  51. package/dist/utils/binding.d.ts.map +1 -1
  52. package/dist/utils/binding.js.map +1 -1
  53. package/dist/utils/open-browser.d.ts +10 -0
  54. package/dist/utils/open-browser.d.ts.map +1 -0
  55. package/dist/utils/open-browser.js +23 -0
  56. package/dist/utils/open-browser.js.map +1 -0
  57. package/genes/academic-writer/.cloud-manifest.json +6 -0
  58. package/genes/academic-writer/.gene-manifest.json +8 -0
  59. package/genes/academic-writer/SKILL.md +274 -0
  60. package/genes/academic-writer/phenotype.json +28 -0
  61. package/genes/ai-components/.cloud-manifest.json +6 -0
  62. package/genes/ai-components/.gene-manifest.json +8 -0
  63. package/genes/ai-components/SKILL.md +381 -0
  64. package/genes/ai-components/phenotype.json +28 -0
  65. package/genes/algorithmic-art/.cloud-manifest.json +6 -0
  66. package/genes/algorithmic-art/.gene-manifest.json +8 -0
  67. package/genes/algorithmic-art/SKILL.md +405 -0
  68. package/genes/algorithmic-art/phenotype.json +28 -0
  69. package/genes/answer-synthesizer/.cloud-manifest.json +6 -0
  70. package/genes/answer-synthesizer/index.ts +194 -0
  71. package/genes/answer-synthesizer/phenotype.json +61 -0
  72. package/genes/api-designer/.cloud-manifest.json +6 -0
  73. package/genes/api-designer/.gene-manifest.json +8 -0
  74. package/genes/api-designer/SKILL.md +456 -0
  75. package/genes/api-designer/phenotype.json +28 -0
  76. package/genes/auto-coder/.cloud-manifest.json +6 -0
  77. package/genes/auto-coder/.gene-manifest.json +8 -0
  78. package/genes/auto-coder/SKILL.md +400 -0
  79. package/genes/auto-coder/phenotype.json +28 -0
  80. package/genes/auto-writer/.cloud-manifest.json +6 -0
  81. package/genes/auto-writer/.gene-manifest.json +8 -0
  82. package/genes/auto-writer/SKILL.md +361 -0
  83. package/genes/auto-writer/phenotype.json +28 -0
  84. package/genes/brand-personality/.cloud-manifest.json +6 -0
  85. package/genes/brand-personality/.gene-manifest.json +8 -0
  86. package/genes/brand-personality/SKILL.md +549 -0
  87. package/genes/brand-personality/phenotype.json +28 -0
  88. package/genes/business-writer/.cloud-manifest.json +6 -0
  89. package/genes/business-writer/.gene-manifest.json +8 -0
  90. package/genes/business-writer/SKILL.md +448 -0
  91. package/genes/business-writer/phenotype.json +28 -0
  92. package/genes/citation-manager/.cloud-manifest.json +6 -0
  93. package/genes/citation-manager/.gene-manifest.json +8 -0
  94. package/genes/citation-manager/SKILL.md +279 -0
  95. package/genes/citation-manager/index.ts +162 -0
  96. package/genes/citation-manager/package.json +1 -0
  97. package/genes/citation-manager/phenotype.json +50 -0
  98. package/genes/code-complexity/.cloud-manifest.json +6 -0
  99. package/genes/code-complexity/README.md +35 -0
  100. package/genes/code-complexity/index.ts +101 -0
  101. package/genes/code-complexity/phenotype.json +34 -0
  102. package/genes/copywriter/.cloud-manifest.json +6 -0
  103. package/genes/copywriter/.gene-manifest.json +8 -0
  104. package/genes/copywriter/SKILL.md +329 -0
  105. package/genes/copywriter/phenotype.json +28 -0
  106. package/genes/creative-writer/.cloud-manifest.json +6 -0
  107. package/genes/creative-writer/.gene-manifest.json +8 -0
  108. package/genes/creative-writer/SKILL.md +356 -0
  109. package/genes/creative-writer/phenotype.json +28 -0
  110. package/genes/data-modeler/.cloud-manifest.json +6 -0
  111. package/genes/data-modeler/.gene-manifest.json +8 -0
  112. package/genes/data-modeler/SKILL.md +486 -0
  113. package/genes/data-modeler/phenotype.json +28 -0
  114. package/genes/debugger/.cloud-manifest.json +6 -0
  115. package/genes/debugger/.gene-manifest.json +8 -0
  116. package/genes/debugger/SKILL.md +416 -0
  117. package/genes/debugger/phenotype.json +28 -0
  118. package/genes/design-tokens/.cloud-manifest.json +6 -0
  119. package/genes/design-tokens/.gene-manifest.json +8 -0
  120. package/genes/design-tokens/SKILL.md +222 -0
  121. package/genes/design-tokens/index.ts +128 -0
  122. package/genes/design-tokens/package.json +1 -0
  123. package/genes/design-tokens/phenotype.json +1 -0
  124. package/genes/devops-automator/.cloud-manifest.json +6 -0
  125. package/genes/devops-automator/.gene-manifest.json +8 -0
  126. package/genes/devops-automator/SKILL.md +490 -0
  127. package/genes/devops-automator/phenotype.json +28 -0
  128. package/genes/doc-coauthoring/.cloud-manifest.json +6 -0
  129. package/genes/doc-coauthoring/.gene-manifest.json +8 -0
  130. package/genes/doc-coauthoring/SKILL.md +375 -0
  131. package/genes/doc-coauthoring/phenotype.json +28 -0
  132. package/genes/doc-retrieval/.cloud-manifest.json +6 -0
  133. package/genes/doc-retrieval/index.ts +134 -0
  134. package/genes/doc-retrieval/phenotype.json +54 -0
  135. package/genes/docs-writer/.cloud-manifest.json +6 -0
  136. package/genes/docs-writer/.gene-manifest.json +8 -0
  137. package/genes/docs-writer/SKILL.md +492 -0
  138. package/genes/docs-writer/phenotype.json +28 -0
  139. package/genes/evolve-life/.cloud-manifest.json +6 -0
  140. package/genes/evolve-life/.compile-result.json +12 -0
  141. package/genes/evolve-life/README.md +52 -0
  142. package/genes/evolve-life/gene.ir.wasm +0 -0
  143. package/genes/evolve-life/gene.wasm +0 -0
  144. package/genes/evolve-life/index.ts +255 -0
  145. package/genes/evolve-life/phenotype.json +129 -0
  146. package/genes/evolve-life-bitwise/.cloud-manifest.json +6 -0
  147. package/genes/evolve-life-bitwise/.compile-result.json +12 -0
  148. package/genes/evolve-life-bitwise/gene.ir.wasm +0 -0
  149. package/genes/evolve-life-bitwise/gene.wasm +0 -0
  150. package/genes/evolve-life-bitwise/index.ts +273 -0
  151. package/genes/evolve-life-bitwise/phenotype.json +129 -0
  152. package/genes/evolve-life-sparse/.cloud-manifest.json +6 -0
  153. package/genes/evolve-life-sparse/.compile-result.json +12 -0
  154. package/genes/evolve-life-sparse/gene.ir.wasm +0 -0
  155. package/genes/evolve-life-sparse/gene.wasm +0 -0
  156. package/genes/evolve-life-sparse/index.ts +236 -0
  157. package/genes/evolve-life-sparse/phenotype.json +129 -0
  158. package/genes/fact-checker/.cloud-manifest.json +6 -0
  159. package/genes/fact-checker/.gene-manifest.json +8 -0
  160. package/genes/fact-checker/SKILL.md +373 -0
  161. package/genes/fact-checker/phenotype.json +28 -0
  162. package/genes/genesis-code-format/.cloud-manifest.json +6 -0
  163. package/genes/genesis-code-format/package.json +1 -0
  164. package/genes/genesis-code-format/phenotype.json +1 -0
  165. package/genes/genesis-file-read/.cloud-manifest.json +6 -0
  166. package/genes/genesis-file-read/index.ts +11 -1
  167. package/genes/genesis-file-read/package.json +1 -0
  168. package/genes/genesis-file-read/phenotype.json +1 -0
  169. package/genes/genesis-l0-constraint/.cloud-manifest.json +6 -0
  170. package/genes/genesis-l0-constraint/package.json +1 -0
  171. package/genes/genesis-l0-constraint/phenotype.json +1 -0
  172. package/genes/genesis-web-search/.cloud-manifest.json +2 -2
  173. package/genes/genesis-web-search/package.json +1 -0
  174. package/genes/genesis-web-search/phenotype.json +1 -0
  175. package/genes/genesis-web-search-lite/.cloud-manifest.json +6 -0
  176. package/genes/genesis-web-search-lite/package.json +1 -0
  177. package/genes/genesis-web-search-lite/phenotype.json +1 -0
  178. package/genes/git-workflow/.cloud-manifest.json +6 -0
  179. package/genes/git-workflow/.gene-manifest.json +8 -0
  180. package/genes/git-workflow/SKILL.md +407 -0
  181. package/genes/git-workflow/phenotype.json +28 -0
  182. package/genes/grammar-checker/.cloud-manifest.json +6 -0
  183. package/genes/grammar-checker/.gene-manifest.json +8 -0
  184. package/genes/grammar-checker/SKILL.md +194 -0
  185. package/genes/grammar-checker/index.ts +168 -0
  186. package/genes/grammar-checker/package.json +1 -0
  187. package/genes/grammar-checker/phenotype.json +52 -0
  188. package/genes/json-validator/.cloud-manifest.json +6 -0
  189. package/genes/json-validator/README.md +42 -0
  190. package/genes/json-validator/index.ts +112 -0
  191. package/genes/json-validator/phenotype.json +42 -0
  192. package/genes/license-advisor/.cloud-manifest.json +6 -0
  193. package/genes/license-advisor/.gene-manifest.json +8 -0
  194. package/genes/license-advisor/SKILL.md +117 -0
  195. package/genes/license-advisor/phenotype.json +28 -0
  196. package/genes/logic-architect/.cloud-manifest.json +6 -0
  197. package/genes/logic-architect/.gene-manifest.json +8 -0
  198. package/genes/logic-architect/SKILL.md +451 -0
  199. package/genes/logic-architect/phenotype.json +28 -0
  200. package/genes/markdown-formatter/.cloud-manifest.json +6 -0
  201. package/genes/markdown-formatter/README.md +34 -0
  202. package/genes/markdown-formatter/index.ts +86 -0
  203. package/genes/markdown-formatter/phenotype.json +32 -0
  204. package/genes/orch/.cloud-manifest.json +6 -0
  205. package/genes/orch/.gene-manifest.json +8 -0
  206. package/genes/orch/SKILL.md +504 -0
  207. package/genes/orch/phenotype.json +28 -0
  208. package/genes/particle-barneshut/.cloud-manifest.json +6 -0
  209. package/genes/particle-barneshut/.compile-result.json +12 -0
  210. package/genes/particle-barneshut/README.md +55 -0
  211. package/genes/particle-barneshut/gene.ir.wasm +0 -0
  212. package/genes/particle-barneshut/gene.wasm +0 -0
  213. package/genes/particle-barneshut/index.ts +486 -0
  214. package/genes/particle-barneshut/phenotype.json +137 -0
  215. package/genes/particle-brute/.cloud-manifest.json +6 -0
  216. package/genes/particle-brute/.compile-result.json +12 -0
  217. package/genes/particle-brute/README.md +55 -0
  218. package/genes/particle-brute/gene.ir.wasm +0 -0
  219. package/genes/particle-brute/gene.wasm +0 -0
  220. package/genes/particle-brute/index.ts +277 -0
  221. package/genes/particle-brute/phenotype.json +137 -0
  222. package/genes/particle-spatial/.cloud-manifest.json +6 -0
  223. package/genes/particle-spatial/.compile-result.json +12 -0
  224. package/genes/particle-spatial/README.md +53 -0
  225. package/genes/particle-spatial/gene.ir.wasm +0 -0
  226. package/genes/particle-spatial/gene.wasm +0 -0
  227. package/genes/particle-spatial/index.ts +352 -0
  228. package/genes/particle-spatial/phenotype.json +137 -0
  229. package/genes/performance-optimizer/.cloud-manifest.json +6 -0
  230. package/genes/performance-optimizer/.gene-manifest.json +8 -0
  231. package/genes/performance-optimizer/SKILL.md +480 -0
  232. package/genes/performance-optimizer/phenotype.json +28 -0
  233. package/genes/plagiarism-checker/.cloud-manifest.json +6 -0
  234. package/genes/plagiarism-checker/.gene-manifest.json +8 -0
  235. package/genes/plagiarism-checker/SKILL.md +342 -0
  236. package/genes/plagiarism-checker/phenotype.json +28 -0
  237. package/genes/product-manager/.cloud-manifest.json +6 -0
  238. package/genes/product-manager/.gene-manifest.json +8 -0
  239. package/genes/product-manager/SKILL.md +249 -0
  240. package/genes/product-manager/phenotype.json +28 -0
  241. package/genes/project-reviewer/.cloud-manifest.json +6 -0
  242. package/genes/project-reviewer/.gene-manifest.json +8 -0
  243. package/genes/project-reviewer/SKILL.md +312 -0
  244. package/genes/project-reviewer/phenotype.json +28 -0
  245. package/genes/prompt-engineer/.cloud-manifest.json +6 -0
  246. package/genes/prompt-engineer/.gene-manifest.json +8 -0
  247. package/genes/prompt-engineer/SKILL.md +411 -0
  248. package/genes/prompt-engineer/phenotype.json +28 -0
  249. package/genes/readability-analyzer/.cloud-manifest.json +6 -0
  250. package/genes/readability-analyzer/.gene-manifest.json +8 -0
  251. package/genes/readability-analyzer/SKILL.md +357 -0
  252. package/genes/readability-analyzer/index.ts +123 -0
  253. package/genes/readability-analyzer/package.json +1 -0
  254. package/genes/readability-analyzer/phenotype.json +35 -0
  255. package/genes/rotifer-protocol/SKILL.md +121 -0
  256. package/genes/security-auditor/.cloud-manifest.json +6 -0
  257. package/genes/security-auditor/.gene-manifest.json +8 -0
  258. package/genes/security-auditor/SKILL.md +494 -0
  259. package/genes/security-auditor/phenotype.json +28 -0
  260. package/genes/seo-optimizer/.cloud-manifest.json +6 -0
  261. package/genes/seo-optimizer/.gene-manifest.json +8 -0
  262. package/genes/seo-optimizer/SKILL.md +327 -0
  263. package/genes/seo-optimizer/index.ts +206 -0
  264. package/genes/seo-optimizer/package.json +1 -0
  265. package/genes/seo-optimizer/phenotype.json +1 -0
  266. package/genes/source-linker/.cloud-manifest.json +6 -0
  267. package/genes/source-linker/index.ts +88 -0
  268. package/genes/source-linker/phenotype.json +45 -0
  269. package/genes/style-optimizer/.cloud-manifest.json +6 -0
  270. package/genes/style-optimizer/.gene-manifest.json +8 -0
  271. package/genes/style-optimizer/SKILL.md +285 -0
  272. package/genes/style-optimizer/phenotype.json +28 -0
  273. package/genes/tech-lead/.cloud-manifest.json +6 -0
  274. package/genes/tech-lead/.gene-manifest.json +8 -0
  275. package/genes/tech-lead/SKILL.md +451 -0
  276. package/genes/tech-lead/phenotype.json +28 -0
  277. package/genes/test-wrap/.cloud-manifest.json +6 -0
  278. package/genes/test-wrap/.gene-manifest.json +8 -0
  279. package/genes/test-wrap/phenotype.json +28 -0
  280. package/genes/testing-strategist/.cloud-manifest.json +6 -0
  281. package/genes/testing-strategist/.gene-manifest.json +8 -0
  282. package/genes/testing-strategist/SKILL.md +500 -0
  283. package/genes/testing-strategist/phenotype.json +28 -0
  284. package/genes/text-summarizer/.cloud-manifest.json +6 -0
  285. package/genes/text-summarizer/README.md +34 -0
  286. package/genes/text-summarizer/index.ts +122 -0
  287. package/genes/text-summarizer/phenotype.json +32 -0
  288. package/genes/tone-analyzer/.cloud-manifest.json +6 -0
  289. package/genes/tone-analyzer/.gene-manifest.json +8 -0
  290. package/genes/tone-analyzer/SKILL.md +410 -0
  291. package/genes/tone-analyzer/phenotype.json +28 -0
  292. package/genes/translator/.cloud-manifest.json +6 -0
  293. package/genes/translator/.gene-manifest.json +8 -0
  294. package/genes/translator/SKILL.md +355 -0
  295. package/genes/translator/phenotype.json +28 -0
  296. package/genes/ui-components/.cloud-manifest.json +6 -0
  297. package/genes/ui-components/.gene-manifest.json +8 -0
  298. package/genes/ui-components/SKILL.md +467 -0
  299. package/genes/ui-components/phenotype.json +28 -0
  300. package/genes/uiux-designer/.cloud-manifest.json +6 -0
  301. package/genes/uiux-designer/.gene-manifest.json +8 -0
  302. package/genes/uiux-designer/SKILL.md +353 -0
  303. package/genes/uiux-designer/phenotype.json +28 -0
  304. package/genes/url-extractor/.cloud-manifest.json +6 -0
  305. package/genes/url-extractor/README.md +37 -0
  306. package/genes/url-extractor/index.ts +86 -0
  307. package/genes/url-extractor/phenotype.json +48 -0
  308. package/genes/ux-patterns/.cloud-manifest.json +6 -0
  309. package/genes/ux-patterns/.gene-manifest.json +8 -0
  310. package/genes/ux-patterns/SKILL.md +872 -0
  311. package/genes/ux-patterns/phenotype.json +28 -0
  312. package/genes/web3-components/.cloud-manifest.json +6 -0
  313. package/genes/web3-components/.gene-manifest.json +8 -0
  314. package/genes/web3-components/SKILL.md +390 -0
  315. package/genes/web3-components/phenotype.json +28 -0
  316. package/package.json +6 -5
@@ -0,0 +1,480 @@
1
+ ---
2
+ name: performance-optimizer
3
+ description: Optimize web performance including Core Web Vitals, bundle size, and runtime efficiency. Analyze and improve LCP, FID, CLS metrics. Use when optimizing performance, reducing bundle size, or when the user mentions slow, performance, loading, lighthouse, or web vitals.
4
+ ---
5
+
6
+ # Performance Optimizer (性能优化师)
7
+
8
+ **Goal**: 提升 Web 应用性能,确保良好用户体验和 SEO 表现。
9
+
10
+ **核心指标**: Core Web Vitals (LCP, FID, CLS)
11
+
12
+ ---
13
+
14
+ ## 1. Core Web Vitals
15
+
16
+ ### 指标标准
17
+
18
+ | 指标 | 含义 | Good | Needs Improvement | Poor |
19
+ |------|------|------|-------------------|------|
20
+ | **LCP** | 最大内容绘制 | < 2.5s | 2.5s - 4s | > 4s |
21
+ | **FID** | 首次输入延迟 | < 100ms | 100ms - 300ms | > 300ms |
22
+ | **CLS** | 累积布局偏移 | < 0.1 | 0.1 - 0.25 | > 0.25 |
23
+ | **INP** | 交互到下一次绘制 | < 200ms | 200ms - 500ms | > 500ms |
24
+
25
+ ### 测量工具
26
+
27
+ ```bash
28
+ # Lighthouse CLI
29
+ npx lighthouse https://example.com --view
30
+
31
+ # Web Vitals 库
32
+ pnpm add web-vitals
33
+ ```
34
+
35
+ ```typescript
36
+ // 监控 Web Vitals
37
+ import { onLCP, onFID, onCLS, onINP } from 'web-vitals'
38
+
39
+ onLCP(console.log)
40
+ onFID(console.log)
41
+ onCLS(console.log)
42
+ onINP(console.log)
43
+ ```
44
+
45
+ ---
46
+
47
+ ## 2. Next.js Optimizations
48
+
49
+ ### Image 优化
50
+
51
+ ```tsx
52
+ // ❌ 未优化
53
+ <img src="/hero.png" />
54
+
55
+ // ✅ 使用 next/image
56
+ import Image from 'next/image'
57
+
58
+ <Image
59
+ src="/hero.png"
60
+ width={800}
61
+ height={400}
62
+ alt="Hero"
63
+ priority // LCP 图片加 priority
64
+ />
65
+ ```
66
+
67
+ ### Font 优化
68
+
69
+ ```typescript
70
+ // app/layout.tsx
71
+ import { Inter } from 'next/font/google'
72
+
73
+ const inter = Inter({
74
+ subsets: ['latin'],
75
+ display: 'swap', // 避免 FOIT
76
+ preload: true,
77
+ })
78
+
79
+ export default function Layout({ children }) {
80
+ return (
81
+ <html className={inter.className}>
82
+ <body>{children}</body>
83
+ </html>
84
+ )
85
+ }
86
+ ```
87
+
88
+ ### Script 优化
89
+
90
+ ```tsx
91
+ import Script from 'next/script'
92
+
93
+ // 非关键脚本延迟加载
94
+ <Script
95
+ src="https://analytics.com/script.js"
96
+ strategy="lazyOnload"
97
+ />
98
+
99
+ // 交互后加载
100
+ <Script
101
+ src="https://widget.com/chat.js"
102
+ strategy="afterInteractive"
103
+ />
104
+ ```
105
+
106
+ ### 动态导入
107
+
108
+ ```tsx
109
+ import dynamic from 'next/dynamic'
110
+
111
+ // 客户端组件延迟加载
112
+ const HeavyChart = dynamic(() => import('./HeavyChart'), {
113
+ loading: () => <Skeleton />,
114
+ ssr: false,
115
+ })
116
+
117
+ // 条件导入
118
+ const AdminPanel = dynamic(() => import('./AdminPanel'), {
119
+ loading: () => null,
120
+ })
121
+
122
+ function Page() {
123
+ return (
124
+ <>
125
+ {isAdmin && <AdminPanel />}
126
+ </>
127
+ )
128
+ }
129
+ ```
130
+
131
+ ---
132
+
133
+ ## 3. Bundle Size Optimization
134
+
135
+ ### 分析 Bundle
136
+
137
+ ```bash
138
+ # 安装分析工具
139
+ pnpm add -D @next/bundle-analyzer
140
+
141
+ # next.config.js
142
+ const withBundleAnalyzer = require('@next/bundle-analyzer')({
143
+ enabled: process.env.ANALYZE === 'true',
144
+ })
145
+
146
+ module.exports = withBundleAnalyzer({
147
+ // config
148
+ })
149
+
150
+ # 运行分析
151
+ ANALYZE=true pnpm build
152
+ ```
153
+
154
+ ### Tree Shaking
155
+
156
+ ```typescript
157
+ // ❌ 导入整个库
158
+ import _ from 'lodash'
159
+ _.debounce(fn, 300)
160
+
161
+ // ✅ 按需导入
162
+ import debounce from 'lodash/debounce'
163
+ debounce(fn, 300)
164
+
165
+ // ✅ 或使用 lodash-es
166
+ import { debounce } from 'lodash-es'
167
+ ```
168
+
169
+ ### 替换重型库
170
+
171
+ | 重型库 | 轻量替代 | 节省 |
172
+ |--------|----------|------|
173
+ | moment.js | date-fns / dayjs | ~95% |
174
+ | lodash | lodash-es + 按需导入 | ~90% |
175
+ | axios | fetch (原生) | 100% |
176
+ | uuid | nanoid | ~75% |
177
+
178
+ ### 代码分割
179
+
180
+ ```tsx
181
+ // 路由级分割 (Next.js 自动)
182
+ // app/dashboard/page.tsx → 单独 chunk
183
+
184
+ // 组件级分割
185
+ const Modal = dynamic(() => import('./Modal'))
186
+
187
+ // 条件加载
188
+ if (condition) {
189
+ const module = await import('./heavy-module')
190
+ }
191
+ ```
192
+
193
+ ---
194
+
195
+ ## 4. React Optimizations
196
+
197
+ ### 避免不必要的重渲染
198
+
199
+ ```tsx
200
+ // ❌ 每次渲染创建新对象
201
+ <Child style={{ color: 'red' }} />
202
+
203
+ // ✅ 使用 useMemo
204
+ const style = useMemo(() => ({ color: 'red' }), [])
205
+ <Child style={style} />
206
+ ```
207
+
208
+ ```tsx
209
+ // ❌ 每次渲染创建新函数
210
+ <Button onClick={() => handleClick(id)} />
211
+
212
+ // ✅ 使用 useCallback
213
+ const onClick = useCallback(() => handleClick(id), [id])
214
+ <Button onClick={onClick} />
215
+ ```
216
+
217
+ ### React.memo
218
+
219
+ ```tsx
220
+ // 纯展示组件用 memo
221
+ const UserCard = memo(function UserCard({ user }) {
222
+ return <div>{user.name}</div>
223
+ })
224
+
225
+ // 对比函数 (复杂 props)
226
+ const UserCard = memo(function UserCard({ user }) {
227
+ return <div>{user.name}</div>
228
+ }, (prev, next) => prev.user.id === next.user.id)
229
+ ```
230
+
231
+ ### 虚拟化长列表
232
+
233
+ ```tsx
234
+ import { useVirtualizer } from '@tanstack/react-virtual'
235
+
236
+ function VirtualList({ items }) {
237
+ const parentRef = useRef(null)
238
+
239
+ const virtualizer = useVirtualizer({
240
+ count: items.length,
241
+ getScrollElement: () => parentRef.current,
242
+ estimateSize: () => 50,
243
+ })
244
+
245
+ return (
246
+ <div ref={parentRef} style={{ height: '400px', overflow: 'auto' }}>
247
+ <div style={{ height: virtualizer.getTotalSize() }}>
248
+ {virtualizer.getVirtualItems().map((virtualItem) => (
249
+ <div
250
+ key={virtualItem.key}
251
+ style={{
252
+ position: 'absolute',
253
+ top: virtualItem.start,
254
+ height: virtualItem.size,
255
+ }}
256
+ >
257
+ {items[virtualItem.index]}
258
+ </div>
259
+ ))}
260
+ </div>
261
+ </div>
262
+ )
263
+ }
264
+ ```
265
+
266
+ ---
267
+
268
+ ## 5. Network Optimizations
269
+
270
+ ### 预加载关键资源
271
+
272
+ ```tsx
273
+ // app/layout.tsx
274
+ export default function Layout() {
275
+ return (
276
+ <html>
277
+ <head>
278
+ <link rel="preconnect" href="https://api.openai.com" />
279
+ <link rel="dns-prefetch" href="https://fonts.googleapis.com" />
280
+ </head>
281
+ </html>
282
+ )
283
+ }
284
+ ```
285
+
286
+ ### 缓存策略
287
+
288
+ ```typescript
289
+ // API 缓存头
290
+ export async function GET() {
291
+ return Response.json(data, {
292
+ headers: {
293
+ 'Cache-Control': 'public, max-age=60, stale-while-revalidate=300',
294
+ },
295
+ })
296
+ }
297
+
298
+ // Next.js fetch 缓存
299
+ const data = await fetch(url, {
300
+ next: { revalidate: 60 }, // ISR
301
+ })
302
+
303
+ // React Query 缓存
304
+ const { data } = useQuery({
305
+ queryKey: ['users'],
306
+ queryFn: fetchUsers,
307
+ staleTime: 60 * 1000, // 1 分钟内不重新请求
308
+ })
309
+ ```
310
+
311
+ ### 压缩
312
+
313
+ ```javascript
314
+ // next.config.js
315
+ module.exports = {
316
+ compress: true, // 默认开启
317
+
318
+ // 或使用更高压缩率
319
+ experimental: {
320
+ serverActions: {
321
+ bodySizeLimit: '2mb',
322
+ },
323
+ },
324
+ }
325
+ ```
326
+
327
+ ---
328
+
329
+ ## 6. CLS Prevention
330
+
331
+ ### 图片尺寸
332
+
333
+ ```tsx
334
+ // ❌ 无尺寸,导致布局偏移
335
+ <img src="/photo.jpg" />
336
+
337
+ // ✅ 明确尺寸
338
+ <Image src="/photo.jpg" width={400} height={300} alt="" />
339
+
340
+ // ✅ 占位容器
341
+ <div style={{ aspectRatio: '16/9' }}>
342
+ <Image src="/photo.jpg" fill alt="" />
343
+ </div>
344
+ ```
345
+
346
+ ### 字体加载
347
+
348
+ ```css
349
+ /* 使用 font-display: swap */
350
+ @font-face {
351
+ font-family: 'Custom';
352
+ src: url('/font.woff2') format('woff2');
353
+ font-display: swap;
354
+ }
355
+ ```
356
+
357
+ ### 动态内容
358
+
359
+ ```tsx
360
+ // ❌ 内容插入导致偏移
361
+ {isLoaded && <Banner />}
362
+
363
+ // ✅ 预留空间
364
+ <div style={{ minHeight: '100px' }}>
365
+ {isLoaded ? <Banner /> : <Skeleton />}
366
+ </div>
367
+ ```
368
+
369
+ ---
370
+
371
+ ## 7. Performance Monitoring
372
+
373
+ ### Vercel Analytics
374
+
375
+ ```tsx
376
+ // app/layout.tsx
377
+ import { Analytics } from '@vercel/analytics/react'
378
+ import { SpeedInsights } from '@vercel/speed-insights/next'
379
+
380
+ export default function Layout({ children }) {
381
+ return (
382
+ <html>
383
+ <body>
384
+ {children}
385
+ <Analytics />
386
+ <SpeedInsights />
387
+ </body>
388
+ </html>
389
+ )
390
+ }
391
+ ```
392
+
393
+ ### 自定义监控
394
+
395
+ ```typescript
396
+ // 发送到自己的分析服务
397
+ import { onLCP, onFID, onCLS } from 'web-vitals'
398
+
399
+ function sendToAnalytics(metric) {
400
+ fetch('/api/analytics', {
401
+ method: 'POST',
402
+ body: JSON.stringify(metric),
403
+ })
404
+ }
405
+
406
+ onLCP(sendToAnalytics)
407
+ onFID(sendToAnalytics)
408
+ onCLS(sendToAnalytics)
409
+ ```
410
+
411
+ ---
412
+
413
+ ## 8. Performance Checklist
414
+
415
+ ```markdown
416
+ ## 性能优化检查清单
417
+
418
+ ### 加载性能 (LCP)
419
+ - [ ] 关键图片使用 next/image + priority
420
+ - [ ] 字体使用 next/font
421
+ - [ ] 首屏内容优先加载
422
+ - [ ] 使用 CDN
423
+
424
+ ### 交互性能 (FID/INP)
425
+ - [ ] 减少主线程阻塞
426
+ - [ ] 使用 React.memo 避免重渲染
427
+ - [ ] 长列表虚拟化
428
+ - [ ] 代码分割
429
+
430
+ ### 视觉稳定性 (CLS)
431
+ - [ ] 图片有明确尺寸
432
+ - [ ] 使用 font-display: swap
433
+ - [ ] 动态内容预留空间
434
+
435
+ ### Bundle 优化
436
+ - [ ] 按需导入
437
+ - [ ] 动态导入非关键组件
438
+ - [ ] 替换重型库
439
+ - [ ] 分析 bundle 大小
440
+
441
+ ### 网络优化
442
+ - [ ] 使用缓存策略
443
+ - [ ] 预连接关键域名
444
+ - [ ] 开启压缩
445
+ ```
446
+
447
+ ---
448
+
449
+ ## Quick Reference
450
+
451
+ ### Lighthouse 目标
452
+
453
+ ```
454
+ Performance: > 90
455
+ Accessibility: > 90
456
+ Best Practices: > 90
457
+ SEO: > 90
458
+ ```
459
+
460
+ ### 常用命令
461
+
462
+ ```bash
463
+ # 分析 bundle
464
+ ANALYZE=true pnpm build
465
+
466
+ # Lighthouse
467
+ npx lighthouse https://example.com
468
+
469
+ # Bundle 大小
470
+ npx bundlephobia lodash
471
+ ```
472
+
473
+ ### 性能预算
474
+
475
+ ```
476
+ JS Bundle: < 200KB (gzipped)
477
+ First Load: < 100KB
478
+ LCP: < 2.5s
479
+ TTI: < 3.5s
480
+ ```
@@ -0,0 +1,28 @@
1
+ {
2
+ "domain": "code.performance",
3
+ "description": "Optimize web performance including Core Web Vitals, bundle size, and runtime efficiency. Analyze and improve LCP, FID, CLS metrics. Use when optimizing performance, reducing bundle size, or when the user mentions slow, performance, loading, lighthouse, or web vitals.",
4
+ "inputSchema": {
5
+ "type": "object",
6
+ "properties": {
7
+ "prompt": {
8
+ "type": "string"
9
+ }
10
+ },
11
+ "required": []
12
+ },
13
+ "outputSchema": {
14
+ "type": "object",
15
+ "properties": {
16
+ "result": {
17
+ "type": "string"
18
+ }
19
+ }
20
+ },
21
+ "dependencies": [],
22
+ "version": "0.1.0",
23
+ "author": "rotifer-team",
24
+ "createdAt": 1771939412819,
25
+ "fidelity": "Wrapped",
26
+ "transparency": "Open",
27
+ "source": "skill"
28
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "cloud_id": "d4647fc7-36b2-4c30-9170-25d33d01d4b2",
3
+ "owner": "Rotifer Protocol",
4
+ "version": "0.1.0",
5
+ "published_at": "2026-03-17T14:13:23.969Z"
6
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "geneId": "8a2214ce57aa36eba5f22117ba8784ba9b3b044a0024ae55bfc5972acc38e5fa",
3
+ "name": "plagiarism-checker",
4
+ "domain": "content.integrity",
5
+ "fidelity": "Wrapped",
6
+ "wrappedAt": "2026-02-24T13:23:23.270Z",
7
+ "fromSkill": "../.cursor/skills/plagiarism-checker/SKILL.md"
8
+ }