@umacloud/knowledge 1.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 (418) hide show
  1. package/00-governance/governance-capabilities.md +557 -0
  2. package/00-governance/knowledge-map.md +39 -0
  3. package/00-governance/maintenance-policy.md +76 -0
  4. package/00-governance/review-checklist.md +81 -0
  5. package/README.md +13 -0
  6. package/ai/01-standards/agent-development-complete.md +691 -0
  7. package/ai/01-standards/llm-application-complete.md +488 -0
  8. package/ai/01-standards/mlops-complete.md +798 -0
  9. package/ai/01-standards/prompt-engineering-complete.md +646 -0
  10. package/ai/01-standards/rag-architecture-complete.md +649 -0
  11. package/ai/02-playbooks/llm-evaluation-playbook.md +847 -0
  12. package/ai/03-checklists/ai-project-checklist.md +215 -0
  13. package/ai/04-antipatterns/ai-antipatterns.md +661 -0
  14. package/ai/05-cases/case-rag-production.md +147 -0
  15. package/ai/06-glossary/ai-glossary.md +162 -0
  16. package/ai/agent-evaluation-benchmark.md +53 -0
  17. package/ai/ai-agent-memory-context-management.md +41 -0
  18. package/ai/ai-cost-capacity-optimization-playbook.md +42 -0
  19. package/ai/ai-data-security-and-compliance-playbook.md +37 -0
  20. package/ai/ai-domain-index-and-checklist.md +40 -0
  21. package/ai/ai-governance-maturity-model.md +50 -0
  22. package/ai/ai-model-selection-and-routing-strategy.md +47 -0
  23. package/ai/ai-observability-and-oncall-runbook.md +52 -0
  24. package/ai/ai-rag-engineering-playbook.md +42 -0
  25. package/ai/ai-red-team-and-safety-evaluation.md +42 -0
  26. package/ai/ai-release-readiness-and-rollback-gate.md +42 -0
  27. package/ai/llm-agent-engineering-deep-dive.md +57 -0
  28. package/ai/prompt-and-tool-guardrails.md +52 -0
  29. package/api/01-standards/enterprise-api-standards.md +198 -0
  30. package/api/01-standards/rest-api-design-guide.md +63 -0
  31. package/api/02-playbooks/api-pagination-playbook.md +93 -0
  32. package/api/02-playbooks/graphql-production-playbook.md +176 -0
  33. package/api/03-checklists/api-review-checklist.md +55 -0
  34. package/api/04-antipatterns/api-antipatterns.md +112 -0
  35. package/architecture/01-standards/api-gateway-patterns.md +496 -0
  36. package/architecture/01-standards/cloud-native-patterns.md +644 -0
  37. package/architecture/01-standards/distributed-systems-patterns.md +591 -0
  38. package/architecture/01-standards/event-driven-architecture.md +595 -0
  39. package/architecture/01-standards/microservices-patterns-complete.md +968 -0
  40. package/architecture/01-standards/microservices-patterns.md +495 -0
  41. package/architecture/01-standards/system-design-interview.md +664 -0
  42. package/architecture/02-playbooks/microservices-patterns-playbook.md +137 -0
  43. package/architecture/02-playbooks/migration-playbook.md +780 -0
  44. package/architecture/02-playbooks/system-design-playbook.md +779 -0
  45. package/architecture/03-checklists/architecture-decision-checklist.md +297 -0
  46. package/architecture/04-antipatterns/architecture-antipatterns.md +417 -0
  47. package/architecture/05-cases/case-netflix-microservices.md +413 -0
  48. package/architecture/06-glossary/architecture-glossary.md +164 -0
  49. package/architecture/adr-template-and-examples.md +38 -0
  50. package/architecture/api-gateway-deep-dive.md +1291 -0
  51. package/architecture/configuration-management.md +1162 -0
  52. package/architecture/distributed-transactions.md +1220 -0
  53. package/architecture/microservices-complete.md +735 -0
  54. package/architecture/resilience-and-disaster-patterns.md +37 -0
  55. package/architecture/service-governance.md +1198 -0
  56. package/architecture/system-architecture-deep-dive.md +37 -0
  57. package/backend/01-standards/analytics-and-growth.md +65 -0
  58. package/backend/01-standards/api-and-error-conventions.md +120 -0
  59. package/backend/01-standards/application-layering-and-packaging.md +160 -0
  60. package/backend/01-standards/auth-implementation.md +104 -0
  61. package/backend/01-standards/backend-framework-idioms.md +74 -0
  62. package/backend/01-standards/background-jobs-and-async.md +66 -0
  63. package/backend/01-standards/caching-strategies-complete.md +390 -0
  64. package/backend/01-standards/config-and-observability.md +77 -0
  65. package/backend/01-standards/data-modeling-and-persistence.md +94 -0
  66. package/backend/01-standards/django-complete.md +1765 -0
  67. package/backend/01-standards/email-and-notifications.md +64 -0
  68. package/backend/01-standards/fastapi-complete.md +925 -0
  69. package/backend/01-standards/file-upload-and-storage.md +66 -0
  70. package/backend/01-standards/graphql-api-complete.md +416 -0
  71. package/backend/01-standards/llm-application-standard.md +78 -0
  72. package/backend/01-standards/message-queue-patterns.md +379 -0
  73. package/backend/01-standards/microservices-and-distributed.md +78 -0
  74. package/backend/01-standards/nestjs-complete.md +2167 -0
  75. package/backend/01-standards/payment-integration.md +80 -0
  76. package/backend/01-standards/rate-limiting-complete.md +451 -0
  77. package/backend/01-standards/realtime-and-websocket.md +65 -0
  78. package/backend/01-standards/search-and-filtering.md +64 -0
  79. package/backend/01-standards/spring-boot-complete.md +445 -0
  80. package/backend/02-playbooks/api-design-playbook.md +718 -0
  81. package/backend/02-playbooks/email-send-playbook.md +130 -0
  82. package/backend/02-playbooks/file-upload-s3-playbook.md +153 -0
  83. package/backend/02-playbooks/typescript-enterprise-playbook.md +133 -0
  84. package/backend/02-playbooks/websocket-realtime-playbook.md +154 -0
  85. package/backend/03-checklists/api-launch-checklist.md +189 -0
  86. package/backend/04-antipatterns/backend-antipatterns.md +1051 -0
  87. package/blockchain/01-standards/blockchain-basics.md +557 -0
  88. package/blockchain/01-standards/smart-contract-development.md +1315 -0
  89. package/cicd/01-standards/deployment-and-delivery-standard.md +96 -0
  90. package/cicd/01-standards/github-actions-complete.md +473 -0
  91. package/cicd/01-standards/release-and-store-submission.md +75 -0
  92. package/cicd/02-playbooks/cicd-pipeline-playbook.md +144 -0
  93. package/cicd/02-playbooks/release-management-playbook.md +605 -0
  94. package/cicd/03-checklists/pipeline-security-checklist.md +168 -0
  95. package/cicd/04-antipatterns/cicd-antipatterns.md +589 -0
  96. package/cicd/05-cases/case-deployment-automation.md +221 -0
  97. package/cicd/05-cases/case-gitops-transformation.md +212 -0
  98. package/cicd/06-glossary/cicd-glossary.md +114 -0
  99. package/cicd/cicd-blueprint-deep-dive.md +38 -0
  100. package/cicd/release-readiness-gate.md +37 -0
  101. package/cloud-native/01-standards/container-security.md +741 -0
  102. package/cloud-native/01-standards/kubernetes-complete.md +812 -0
  103. package/cloud-native/02-playbooks/api-gateway-playbook.md +155 -0
  104. package/cloud-native/02-playbooks/gitops-with-argocd.md +760 -0
  105. package/cloud-native/02-playbooks/k8s-troubleshooting-playbook.md +1942 -0
  106. package/cloud-native/02-playbooks/message-queue-playbook.md +129 -0
  107. package/cloud-native/02-playbooks/multicloud-governance.md +726 -0
  108. package/cloud-native/02-playbooks/serverless-patterns.md +788 -0
  109. package/cloud-native/02-playbooks/service-mesh-playbook.md +612 -0
  110. package/cloud-native/02-playbooks/terraform-iac-playbook.md +143 -0
  111. package/cloud-native/03-checklists/container-security-checklist.md +431 -0
  112. package/cloud-native/03-checklists/k8s-production-readiness-checklist.md +460 -0
  113. package/cloud-native/04-antipatterns/container-antipatterns.md +660 -0
  114. package/cloud-native/04-antipatterns/k8s-antipatterns.md +743 -0
  115. package/cloud-native/05-cases/case-k8s-migration.md +478 -0
  116. package/cloud-native/05-cases/case-k8s-scaling.md +642 -0
  117. package/cloud-native/05-cases/case-k8s-security-incident.md +397 -0
  118. package/cloud-native/06-glossary/cloud-native-glossary.md +337 -0
  119. package/cross-platform/01-standards/cross-platform-frameworks.md +83 -0
  120. package/cross-platform/01-standards/platform-selection-and-architecture.md +77 -0
  121. package/data/01-standards/elasticsearch-complete.md +2098 -0
  122. package/data/01-standards/postgresql-complete.md +1613 -0
  123. package/data/01-standards/redis-complete.md +1527 -0
  124. package/data/02-playbooks/database-optimization-playbook.md +403 -0
  125. package/data/02-playbooks/elasticsearch-production-playbook.md +132 -0
  126. package/data/03-checklists/database-launch-checklist.md +187 -0
  127. package/data/04-antipatterns/database-antipatterns.md +873 -0
  128. package/data/05-cases/case-database-migration.md +310 -0
  129. package/data/06-glossary/database-glossary.md +440 -0
  130. package/data/data-governance-and-modeling-deep-dive.md +39 -0
  131. package/data-engineering/01-standards/airflow-complete.md +523 -0
  132. package/data-engineering/01-standards/kafka-complete.md +1521 -0
  133. package/data-engineering/02-playbooks/spark-etl-playbook.md +496 -0
  134. package/data-engineering/03-checklists/pipeline-launch-checklist.md +194 -0
  135. package/data-engineering/04-antipatterns/data-pipeline-antipatterns.md +684 -0
  136. package/data-engineering/05-cases/case-real-time-pipeline.md +355 -0
  137. package/data-engineering/06-glossary/data-engineering-glossary.md +429 -0
  138. package/database/01-standards/database-schema-standards.md +147 -0
  139. package/database/02-playbooks/postgresql-optimization-quick.md +52 -0
  140. package/database/02-playbooks/postgresql-performance-optimization.md +58 -0
  141. package/database/02-playbooks/postgresql-production-playbook.md +146 -0
  142. package/database/02-playbooks/redis-caching-playbook.md +117 -0
  143. package/database/03-checklists/database-review-checklist.md +50 -0
  144. package/database/04-antipatterns/database-antipatterns.md +112 -0
  145. package/design/01-standards/ui-design-system-complete.md +423 -0
  146. package/design/02-playbooks/design-handoff-playbook.md +254 -0
  147. package/design/02-playbooks/design-review-playbook.md +388 -0
  148. package/design/03-checklists/design-review-checklist.md +246 -0
  149. package/design/04-antipatterns/design-antipatterns.md +378 -0
  150. package/design/05-cases/case-design-system-adoption.md +328 -0
  151. package/design/06-glossary/design-glossary.md +329 -0
  152. package/design/ui-full-lifecycle-cross-platform-playbook.md +571 -0
  153. package/design/ux-system-deep-dive.md +38 -0
  154. package/design-systems/00-craft-rules.md +71 -0
  155. package/design-systems/aesthetic-families.md +43 -0
  156. package/design-systems/anti-ai-slop.md +162 -0
  157. package/design-systems/bold-geometric.md +120 -0
  158. package/design-systems/brutalist-bold.md +103 -0
  159. package/design-systems/editorial-clean.md +109 -0
  160. package/design-systems/glass-aurora.md +108 -0
  161. package/design-systems/modern-minimal.md +145 -0
  162. package/design-systems/premium-luxury.md +106 -0
  163. package/design-systems/product-type-design-map.md +48 -0
  164. package/design-systems/soft-warm.md +123 -0
  165. package/design-systems/tech-utility.md +113 -0
  166. package/desktop/01-standards/desktop-app-standard.md +72 -0
  167. package/desktop/01-standards/desktop-design.md +71 -0
  168. package/development/00-governance/document-template.md +41 -0
  169. package/development/01-standards/api-versioning-strategies.md +432 -0
  170. package/development/01-standards/authentication-patterns-complete.md +479 -0
  171. package/development/01-standards/css-architecture-complete.md +550 -0
  172. package/development/01-standards/database-migration-strategies.md +484 -0
  173. package/development/01-standards/elasticsearch-complete.md +347 -0
  174. package/development/01-standards/git-complete.md +371 -0
  175. package/development/01-standards/golang-complete.md +1565 -0
  176. package/development/01-standards/graphql-complete.md +298 -0
  177. package/development/01-standards/javascript-bundlers-complete.md +469 -0
  178. package/development/01-standards/javascript-typescript-complete.md +528 -0
  179. package/development/01-standards/jest-complete.md +275 -0
  180. package/development/01-standards/linux-complete.md +234 -0
  181. package/development/01-standards/logging-observability-complete.md +526 -0
  182. package/development/01-standards/microservices-communication.md +502 -0
  183. package/development/01-standards/mongodb-complete.md +406 -0
  184. package/development/01-standards/oauth2-complete.md +285 -0
  185. package/development/01-standards/performance-optimization-complete.md +289 -0
  186. package/development/01-standards/playwright-complete.md +247 -0
  187. package/development/01-standards/postgresql-complete.md +456 -0
  188. package/development/01-standards/pytest-complete.md +340 -0
  189. package/development/01-standards/python-async-programming.md +902 -0
  190. package/development/01-standards/python-complete.md +956 -0
  191. package/development/01-standards/python-decorators-complete.md +799 -0
  192. package/development/01-standards/python-design-patterns.md +2854 -0
  193. package/development/01-standards/python-packaging-distribution.md +420 -0
  194. package/development/01-standards/python-testing-strategies.md +607 -0
  195. package/development/01-standards/python-web-frameworks-comparison.md +471 -0
  196. package/development/01-standards/redis-complete.md +317 -0
  197. package/development/01-standards/rest-api-complete.md +316 -0
  198. package/development/01-standards/rust-complete.md +578 -0
  199. package/development/01-standards/typescript-advanced-types.md +1513 -0
  200. package/development/01-standards/web-security-complete.md +292 -0
  201. package/development/02-playbooks/api-design-playbook.md +810 -0
  202. package/development/02-playbooks/database-migration-playbook.md +580 -0
  203. package/development/02-playbooks/debugging-playbook.md +692 -0
  204. package/development/02-playbooks/feature-delivery-playbook.md +430 -0
  205. package/development/02-playbooks/incident-hotfix-playbook.md +387 -0
  206. package/development/02-playbooks/performance-optimization-playbook.md +531 -0
  207. package/development/02-playbooks/performance-tuning-playbook.md +652 -0
  208. package/development/02-playbooks/refactor-playbook.md +403 -0
  209. package/development/02-playbooks/release-playbook.md +469 -0
  210. package/development/03-checklists/architecture-review-checklist.md +168 -0
  211. package/development/03-checklists/data-migration-checklist.md +157 -0
  212. package/development/03-checklists/oncall-handover-checklist.md +173 -0
  213. package/development/03-checklists/pr-checklist.md +158 -0
  214. package/development/03-checklists/production-readiness-checklist.md +190 -0
  215. package/development/03-checklists/release-readiness-checklist.md +154 -0
  216. package/development/03-checklists/security-review-checklist.md +182 -0
  217. package/development/04-antipatterns/api-antipatterns.md +657 -0
  218. package/development/04-antipatterns/architecture-antipatterns.md +686 -0
  219. package/development/04-antipatterns/backend-antipatterns.md +648 -0
  220. package/development/04-antipatterns/cicd-antipatterns.md +540 -0
  221. package/development/04-antipatterns/code-smell-antipatterns.md +571 -0
  222. package/development/04-antipatterns/data-antipatterns.md +658 -0
  223. package/development/04-antipatterns/database-antipatterns.md +578 -0
  224. package/development/04-antipatterns/frontend-antipatterns.md +635 -0
  225. package/development/04-antipatterns/reliability-antipatterns.md +700 -0
  226. package/development/04-antipatterns/security-antipatterns.md +747 -0
  227. package/development/05-cases/case-api-version-migration.md +428 -0
  228. package/development/05-cases/case-authorization-hardening.md +383 -0
  229. package/development/05-cases/case-bluegreen-rollback.md +466 -0
  230. package/development/05-cases/case-cache-snowball-protection.md +485 -0
  231. package/development/05-cases/case-ci-cd-pipeline.md +544 -0
  232. package/development/05-cases/case-database-scaling.md +500 -0
  233. package/development/05-cases/case-db-hotspot-optimization.md +487 -0
  234. package/development/05-cases/case-incident-mttr-reduction.md +563 -0
  235. package/development/05-cases/case-microservice-migration.md +375 -0
  236. package/development/05-cases/case-performance-optimization.md +406 -0
  237. package/development/05-cases/case-security-incident-response.md +345 -0
  238. package/development/06-glossary/full-stack-glossary.md +166 -0
  239. package/development/09-maturity/quarterly-audit-template.md +35 -0
  240. package/development/11-ui-excellence/ui-aesthetic-system.md +41 -0
  241. package/development/11-ui-excellence/ui-engineering-excellence.md +435 -0
  242. package/development/12-scenarios/development-scenarios-guide.md +565 -0
  243. package/development/13-implementation-assets/implementation-toolkit.md +282 -0
  244. package/development/13-implementation-assets/knowledge-gates-execution.md +43 -0
  245. package/development/14-full-lifecycle/software-lifecycle-gates.md +511 -0
  246. package/development/15-lifecycle-templates/project-templates-collection.md +791 -0
  247. package/development/api-contract-and-versioning-guide.md +36 -0
  248. package/development/api-governance-complete.md +43 -0
  249. package/development/backend-engineering-complete.md +43 -0
  250. package/development/code-review-quality-complete.md +43 -0
  251. package/development/concurrency-reliability-complete.md +43 -0
  252. package/development/database-engineering-complete.md +43 -0
  253. package/development/engineering-effectiveness-complete.md +43 -0
  254. package/development/engineering-standards-deep-dive.md +38 -0
  255. package/development/frontend-engineering-complete.md +43 -0
  256. package/development/performance-capacity-complete.md +43 -0
  257. package/development/refactor-migration-complete.md +42 -0
  258. package/development/refactoring-and-techdebt-playbook.md +37 -0
  259. package/development/security-in-development-complete.md +43 -0
  260. package/devops/01-standards/cicd-pipeline-complete.md +262 -0
  261. package/devops/01-standards/docker-complete.md +1490 -0
  262. package/devops/01-standards/github-actions-complete.md +337 -0
  263. package/devops/01-standards/kubernetes-complete.md +638 -0
  264. package/devops/01-standards/terraform-complete.md +2117 -0
  265. package/devops/02-playbooks/docker-compose-playbook.md +233 -0
  266. package/devops/02-playbooks/docker-k8s-production-playbook.md +186 -0
  267. package/devops/02-playbooks/docker-production-playbook.md +952 -0
  268. package/edge-iot/01-standards/edge-iot-complete.md +473 -0
  269. package/experts/architect/api-design.md +178 -0
  270. package/experts/architect/methodology.md +124 -0
  271. package/experts/architect/security.md +75 -0
  272. package/experts/backend-lead/methodology.md +216 -0
  273. package/experts/devops/methodology.md +160 -0
  274. package/experts/frontend-lead/methodology.md +178 -0
  275. package/experts/product-manager/industry/ecommerce.md +43 -0
  276. package/experts/product-manager/industry/saas.md +40 -0
  277. package/experts/product-manager/methodology.md +97 -0
  278. package/experts/qa-lead/methodology.md +123 -0
  279. package/experts/qa-lead/test-strategy.md +128 -0
  280. package/experts/uiux-designer/methodology.md +125 -0
  281. package/frontend/01-standards/accessibility-complete.md +532 -0
  282. package/frontend/01-standards/accessibility-standard.md +74 -0
  283. package/frontend/01-standards/admin-dashboard-and-crud.md +72 -0
  284. package/frontend/01-standards/design-tokens-complete.md +444 -0
  285. package/frontend/01-standards/forms-and-validation.md +77 -0
  286. package/frontend/01-standards/frontend-architecture-and-layering.md +119 -0
  287. package/frontend/01-standards/i18n-and-localization.md +65 -0
  288. package/frontend/01-standards/nextjs-complete.md +451 -0
  289. package/frontend/01-standards/react-complete.md +713 -0
  290. package/frontend/01-standards/react-hooks-complete-guide.md +1100 -0
  291. package/frontend/01-standards/react-hooks-complete.md +1171 -0
  292. package/frontend/01-standards/seo-and-web-vitals.md +77 -0
  293. package/frontend/01-standards/state-management-complete.md +444 -0
  294. package/frontend/01-standards/vue-complete.md +499 -0
  295. package/frontend/01-standards/vue3-complete.md +2002 -0
  296. package/frontend/01-standards/web-framework-best-practices.md +64 -0
  297. package/frontend/01-standards/web-performance-complete.md +495 -0
  298. package/frontend/02-playbooks/accessibility-a11y-playbook.md +161 -0
  299. package/frontend/02-playbooks/frontend-performance-playbook.md +707 -0
  300. package/frontend/02-playbooks/i18n-internationalization-playbook.md +120 -0
  301. package/frontend/02-playbooks/performance-optimization-playbook.md +163 -0
  302. package/frontend/02-playbooks/react-nextjs-production-playbook.md +167 -0
  303. package/frontend/02-playbooks/react-state-management-playbook.md +173 -0
  304. package/frontend/03-checklists/component-quality-checklist.md +166 -0
  305. package/frontend/03-checklists/frontend-launch-checklist.md +299 -0
  306. package/frontend/04-antipatterns/frontend-antipatterns.md +886 -0
  307. package/frontend/05-cases/case-performance-optimization.md +274 -0
  308. package/harmony/01-standards/harmonyos-arkts-standard.md +75 -0
  309. package/harmony/01-standards/harmonyos-design.md +65 -0
  310. package/high-quality-engineering-playbook.md +54 -0
  311. package/incident/01-standards/incident-response-complete.md +303 -0
  312. package/incident/02-playbooks/chaos-engineering-playbook.md +883 -0
  313. package/incident/02-playbooks/postmortem-playbook.md +398 -0
  314. package/incident/03-checklists/incident-readiness-checklist.md +181 -0
  315. package/incident/04-antipatterns/incident-antipatterns.md +490 -0
  316. package/incident/05-cases/case-cascade-failure.md +176 -0
  317. package/incident/06-glossary/incident-glossary.md +114 -0
  318. package/incident/postmortem-and-response-deep-dive.md +39 -0
  319. package/industries/ecommerce/ecommerce-complete.md +631 -0
  320. package/industries/education/education-complete.md +555 -0
  321. package/industries/fintech/fintech-complete.md +501 -0
  322. package/industries/gaming/gaming-complete.md +587 -0
  323. package/industries/healthcare/healthcare-complete.md +452 -0
  324. package/low-code/01-standards/low-code-complete.md +944 -0
  325. package/miniprogram/01-standards/ai-common-mistakes.md +61 -0
  326. package/miniprogram/01-standards/miniprogram-custom-navbar-capsule.md +77 -0
  327. package/miniprogram/01-standards/miniprogram-design.md +61 -0
  328. package/miniprogram/01-standards/miniprogram-standard.md +81 -0
  329. package/mobile/01-standards/android-material-design.md +70 -0
  330. package/mobile/01-standards/flutter-complete.md +384 -0
  331. package/mobile/01-standards/ios-design-hig.md +78 -0
  332. package/mobile/01-standards/mobile-app-standard.md +85 -0
  333. package/mobile/01-standards/react-native-complete.md +352 -0
  334. package/mobile/02-playbooks/mobile-cross-platform-playbook.md +175 -0
  335. package/mobile/02-playbooks/mobile-performance.md +473 -0
  336. package/mobile/03-checklists/mobile-release-checklist.md +234 -0
  337. package/mobile/04-antipatterns/mobile-antipatterns.md +798 -0
  338. package/mobile/05-cases/case-app-performance.md +500 -0
  339. package/mobile/05-cases/case-app-startup-optimization.md +218 -0
  340. package/mobile/06-glossary/mobile-glossary.md +484 -0
  341. package/observability/01-standards/observability-standards.md +103 -0
  342. package/observability/02-playbooks/prometheus-grafana-playbook.md +135 -0
  343. package/observability/02-playbooks/structured-logging-playbook.md +73 -0
  344. package/observability/03-checklists/observability-checklist.md +54 -0
  345. package/observability/04-antipatterns/observability-antipatterns.md +106 -0
  346. package/operations/01-standards/prometheus-monitoring-complete.md +1578 -0
  347. package/operations/02-playbooks/capacity-planning-playbook.md +620 -0
  348. package/operations/03-checklists/production-launch-checklist.md +365 -0
  349. package/operations/04-antipatterns/operations-antipatterns.md +664 -0
  350. package/operations/05-cases/case-sre-practices.md +581 -0
  351. package/operations/06-glossary/operations-glossary.md +120 -0
  352. package/operations/aiops-anomaly-detection.md +758 -0
  353. package/operations/capacity-planning.md +1061 -0
  354. package/operations/chaos-engineering.md +659 -0
  355. package/operations/incident-command-system.md +38 -0
  356. package/operations/observability-complete.md +442 -0
  357. package/operations/slo-sli-playbook.md +517 -0
  358. package/operations/sre-operations-deep-dive.md +39 -0
  359. package/package.json +8 -0
  360. package/performance/01-standards/performance-and-scalability.md +80 -0
  361. package/performance/01-standards/performance-standards.md +156 -0
  362. package/performance/02-playbooks/query-optimization-playbook.md +103 -0
  363. package/performance/03-checklists/performance-checklist.md +56 -0
  364. package/performance/04-antipatterns/performance-antipatterns.md +146 -0
  365. package/product/01-standards/product-management-complete.md +285 -0
  366. package/product/02-playbooks/feature-launch-playbook.md +207 -0
  367. package/product/02-playbooks/user-research-playbook.md +532 -0
  368. package/product/03-checklists/feature-launch-checklist.md +275 -0
  369. package/product/04-antipatterns/product-antipatterns.md +355 -0
  370. package/product/05-cases/case-mvp-to-scale.md +384 -0
  371. package/product/06-glossary/product-glossary.md +462 -0
  372. package/product/feature-prioritization-framework.md +40 -0
  373. package/product/kpi-and-metric-tree.md +37 -0
  374. package/product/product-discovery-and-prd-deep-dive.md +41 -0
  375. package/quantum/01-standards/quantum-complete.md +1186 -0
  376. package/security/01-standards/api-security-complete.md +511 -0
  377. package/security/01-standards/container-runtime-security.md +574 -0
  378. package/security/01-standards/data-protection-gdpr.md +543 -0
  379. package/security/01-standards/owasp-top10-complete.md +1890 -0
  380. package/security/01-standards/secure-coding-baseline.md +90 -0
  381. package/security/01-standards/supply-chain-security.md +441 -0
  382. package/security/01-standards/web-security-checklist.md +108 -0
  383. package/security/01-standards/zero-trust-architecture.md +521 -0
  384. package/security/02-playbooks/auth-sso-playbook.md +166 -0
  385. package/security/02-playbooks/incident-response-security-playbook.md +588 -0
  386. package/security/02-playbooks/owasp-api-security-playbook.md +129 -0
  387. package/security/02-playbooks/payment-integration-playbook.md +119 -0
  388. package/security/02-playbooks/penetration-testing-playbook.md +517 -0
  389. package/security/03-checklists/security-audit-checklist.md +356 -0
  390. package/security/04-antipatterns/security-coding-antipatterns.md +580 -0
  391. package/security/05-cases/case-log4shell-incident.md +537 -0
  392. package/security/05-cases/case-major-breaches.md +468 -0
  393. package/security/06-glossary/security-glossary.md +212 -0
  394. package/security/compliance-automation.md +993 -0
  395. package/security/container-security.md +680 -0
  396. package/security/devsecops-complete.md +426 -0
  397. package/security/sast-dast-sca.md +775 -0
  398. package/security/secrets-management.md +594 -0
  399. package/security/security-architecture-deep-dive.md +37 -0
  400. package/security/threat-modeling-stride-playbook.md +40 -0
  401. package/seed-templates/auth-system.md +59 -0
  402. package/seed-templates/blog-content.md +94 -0
  403. package/seed-templates/dashboard.md +89 -0
  404. package/seed-templates/docs-site.md +73 -0
  405. package/seed-templates/e-commerce.md +50 -0
  406. package/seed-templates/saas-landing.md +92 -0
  407. package/seed-templates/settings-page.md +51 -0
  408. package/testing/01-standards/test-strategy-and-layering.md +83 -0
  409. package/testing/01-standards/testing-strategy-complete.md +422 -0
  410. package/testing/01-standards/unit-testing-best-practices.md +118 -0
  411. package/testing/02-playbooks/e2e-testing-playbook.md +988 -0
  412. package/testing/02-playbooks/testing-strategy-playbook.md +126 -0
  413. package/testing/03-checklists/test-strategy-checklist.md +208 -0
  414. package/testing/04-antipatterns/testing-antipatterns.md +718 -0
  415. package/testing/05-cases/case-testing-transformation.md +300 -0
  416. package/testing/06-glossary/testing-glossary.md +110 -0
  417. package/testing/risk-based-test-matrix.md +36 -0
  418. package/testing/testing-strategy-deep-dive.md +37 -0
@@ -0,0 +1,886 @@
1
+ ---
2
+ id: frontend-antipatterns
3
+ title: 前端反模式手册
4
+ domain: frontend
5
+ category: 04-antipatterns
6
+ difficulty: intermediate
7
+ tags: [antipatterns, boundaries, component, error, frontend, prop, useeffect, 内联样式滥用]
8
+ quality_score: 70
9
+ last_updated: 2026-06-15
10
+ ---
11
+ # 前端反模式手册
12
+
13
+ > 覆盖 React/Vue 应用中最常见的 10 类反模式。
14
+ > 每项包含:问题描述、问题代码、修复代码、检测方法。
15
+
16
+ ---
17
+
18
+ ## 1. Prop Drilling(属性透传地狱)
19
+
20
+ **问题**:数据通过多层中间组件逐级传递,中间组件本身不使用该数据,导致组件耦合度高、维护困难。
21
+
22
+ ### 问题代码
23
+
24
+ ```tsx
25
+ // 数据从 App → Layout → Sidebar → UserMenu → Avatar 逐层传递
26
+ function App() {
27
+ const [user, setUser] = useState<User>(currentUser);
28
+ return <Layout user={user} onLogout={() => setUser(null)} />;
29
+ }
30
+
31
+ function Layout({ user, onLogout }: { user: User; onLogout: () => void }) {
32
+ // Layout 本身不使用 user,只是中转
33
+ return (
34
+ <div>
35
+ <Sidebar user={user} onLogout={onLogout} />
36
+ <Main />
37
+ </div>
38
+ );
39
+ }
40
+
41
+ function Sidebar({ user, onLogout }: { user: User; onLogout: () => void }) {
42
+ // Sidebar 也不使用,继续传递
43
+ return <UserMenu user={user} onLogout={onLogout} />;
44
+ }
45
+
46
+ function UserMenu({ user, onLogout }: { user: User; onLogout: () => void }) {
47
+ return <Avatar name={user.name} onLogout={onLogout} />;
48
+ }
49
+ ```
50
+
51
+ ### 修复代码
52
+
53
+ ```tsx
54
+ // 方案 1:Context(适合低频更新的全局状态)
55
+ const AuthContext = createContext<AuthState | null>(null);
56
+
57
+ function useAuth() {
58
+ const ctx = useContext(AuthContext);
59
+ if (!ctx) throw new Error('useAuth must be used within AuthProvider');
60
+ return ctx;
61
+ }
62
+
63
+ function AuthProvider({ children }: { children: ReactNode }) {
64
+ const [user, setUser] = useState<User>(currentUser);
65
+ const logout = useCallback(() => setUser(null), []);
66
+ return (
67
+ <AuthContext.Provider value={{ user, logout }}>
68
+ {children}
69
+ </AuthContext.Provider>
70
+ );
71
+ }
72
+
73
+ // 消费端直接使用,无需中间层传递
74
+ function Avatar() {
75
+ const { user, logout } = useAuth();
76
+ return <button onClick={logout}>{user.name}</button>;
77
+ }
78
+
79
+ // 方案 2:组合模式(Composition)
80
+ function App() {
81
+ const [user, setUser] = useState<User>(currentUser);
82
+ return (
83
+ <Layout
84
+ sidebar={<UserMenu user={user} onLogout={() => setUser(null)} />}
85
+ >
86
+ <Main />
87
+ </Layout>
88
+ );
89
+ }
90
+
91
+ function Layout({ sidebar, children }: { sidebar: ReactNode; children: ReactNode }) {
92
+ return (
93
+ <div>
94
+ <aside>{sidebar}</aside>
95
+ <main>{children}</main>
96
+ </div>
97
+ );
98
+ }
99
+ ```
100
+
101
+ **检测方法**:ESLint 规则 `react/jsx-max-depth`;同一 prop 在 3 层以上传递即需重构。
102
+
103
+ ---
104
+
105
+ ## 2. 巨型组件(God Component)
106
+
107
+ **问题**:单个组件文件超过 300 行,包含多种职责:数据获取、业务逻辑、UI 渲染混杂在一起。
108
+
109
+ ### 问题代码
110
+
111
+ ```tsx
112
+ function DashboardPage() {
113
+ const [users, setUsers] = useState([]);
114
+ const [orders, setOrders] = useState([]);
115
+ const [stats, setStats] = useState(null);
116
+ const [filter, setFilter] = useState('all');
117
+ const [sortBy, setSortBy] = useState('date');
118
+ const [page, setPage] = useState(1);
119
+ const [isExporting, setIsExporting] = useState(false);
120
+
121
+ useEffect(() => { fetchUsers().then(setUsers); }, []);
122
+ useEffect(() => { fetchOrders(filter, sortBy, page).then(setOrders); }, [filter, sortBy, page]);
123
+ useEffect(() => { fetchStats().then(setStats); }, []);
124
+
125
+ const handleExport = async () => {
126
+ setIsExporting(true);
127
+ // 50 行导出逻辑 ...
128
+ setIsExporting(false);
129
+ };
130
+
131
+ const filteredUsers = useMemo(() => {
132
+ // 30 行过滤逻辑 ...
133
+ }, [users, filter]);
134
+
135
+ // 200+ 行 JSX 渲染:统计卡片、用户表格、订单列表、筛选器、分页、导出按钮 ...
136
+ return <div>{/* ... */}</div>;
137
+ }
138
+ ```
139
+
140
+ ### 修复代码
141
+
142
+ ```tsx
143
+ // 拆分为自定义 Hook + 子组件
144
+ function useDashboardData(filter: string, sortBy: string, page: number) {
145
+ const { data: users } = useQuery(['users'], fetchUsers);
146
+ const { data: orders } = useQuery(['orders', filter, sortBy, page],
147
+ () => fetchOrders(filter, sortBy, page));
148
+ const { data: stats } = useQuery(['stats'], fetchStats);
149
+ return { users, orders, stats };
150
+ }
151
+
152
+ function useExport() {
153
+ const [isExporting, setIsExporting] = useState(false);
154
+ const handleExport = useCallback(async (data: Order[]) => {
155
+ setIsExporting(true);
156
+ try { await exportOrders(data); }
157
+ finally { setIsExporting(false); }
158
+ }, []);
159
+ return { isExporting, handleExport };
160
+ }
161
+
162
+ function DashboardPage() {
163
+ const [filter, setFilter] = useState('all');
164
+ const [sortBy, setSortBy] = useState('date');
165
+ const [page, setPage] = useState(1);
166
+ const { users, orders, stats } = useDashboardData(filter, sortBy, page);
167
+ const { isExporting, handleExport } = useExport();
168
+
169
+ return (
170
+ <div>
171
+ <StatsCards stats={stats} />
172
+ <FilterBar filter={filter} onFilterChange={setFilter} />
173
+ <UserTable users={users} />
174
+ <OrderList orders={orders} sortBy={sortBy} onSortChange={setSortBy} />
175
+ <Pagination page={page} onPageChange={setPage} />
176
+ <ExportButton loading={isExporting} onClick={() => handleExport(orders)} />
177
+ </div>
178
+ );
179
+ }
180
+ ```
181
+
182
+ **检测方法**:设置 ESLint `max-lines-per-function` 为 200;超过即触发拆分。
183
+
184
+ ---
185
+
186
+ ## 3. useEffect 滥用
187
+
188
+ **问题**:将 useEffect 当作"当 X 改变时做 Y"的通用监听器,导致不必要的渲染循环、竞态条件、难以追踪的 bug。
189
+
190
+ ### 问题代码
191
+
192
+ ```tsx
193
+ // 反模式 1:用 useEffect 派生状态
194
+ function ProductPage({ productId }: { productId: string }) {
195
+ const [product, setProduct] = useState(null);
196
+ const [price, setPrice] = useState(0);
197
+
198
+ useEffect(() => {
199
+ fetchProduct(productId).then(setProduct);
200
+ }, [productId]);
201
+
202
+ // 多余的 useEffect:可直接计算
203
+ useEffect(() => {
204
+ if (product) {
205
+ setPrice(product.basePrice * (1 - product.discount));
206
+ }
207
+ }, [product]);
208
+
209
+ return <div>{price}</div>;
210
+ }
211
+
212
+ // 反模式 2:用 useEffect 响应事件
213
+ function SearchForm() {
214
+ const [query, setQuery] = useState('');
215
+ const [submitted, setSubmitted] = useState(false);
216
+
217
+ useEffect(() => {
218
+ if (submitted) {
219
+ doSearch(query);
220
+ setSubmitted(false);
221
+ }
222
+ }, [submitted, query]);
223
+
224
+ return <button onClick={() => setSubmitted(true)}>搜索</button>;
225
+ }
226
+ ```
227
+
228
+ ### 修复代码
229
+
230
+ ```tsx
231
+ // 修复 1:直接计算派生值,无需 useEffect
232
+ function ProductPage({ productId }: { productId: string }) {
233
+ const { data: product } = useQuery(['product', productId],
234
+ () => fetchProduct(productId));
235
+
236
+ // 直接计算,无需额外 state 和 effect
237
+ const price = product ? product.basePrice * (1 - product.discount) : 0;
238
+
239
+ return <div>{price}</div>;
240
+ }
241
+
242
+ // 修复 2:在事件处理函数中直接执行
243
+ function SearchForm() {
244
+ const [query, setQuery] = useState('');
245
+
246
+ const handleSubmit = () => {
247
+ doSearch(query); // 直接在事件中调用,无需 effect
248
+ };
249
+
250
+ return <button onClick={handleSubmit}>搜索</button>;
251
+ }
252
+ ```
253
+
254
+ **检测方法**:ESLint 插件 `eslint-plugin-react-hooks`;审查所有 useEffect,如果 effect 内只是 setState 且依赖另一个 state,通常可改为 useMemo 或直接计算。
255
+
256
+ ---
257
+
258
+ ## 4. 过度重渲染
259
+
260
+ **问题**:父组件状态变化导致所有子组件无差别重渲染,在大型列表或复杂组件树中造成明显卡顿。
261
+
262
+ ### 问题代码
263
+
264
+ ```tsx
265
+ function ParentList() {
266
+ const [selectedId, setSelectedId] = useState<string | null>(null);
267
+ const [items, setItems] = useState<Item[]>(initialItems);
268
+
269
+ // 每次 selectedId 变化,所有 ListItem 都重渲染
270
+ return (
271
+ <ul>
272
+ {items.map(item => (
273
+ <ListItem
274
+ key={item.id}
275
+ item={item}
276
+ isSelected={item.id === selectedId}
277
+ onSelect={() => setSelectedId(item.id)} // 每次创建新函数
278
+ />
279
+ ))}
280
+ </ul>
281
+ );
282
+ }
283
+
284
+ function ListItem({ item, isSelected, onSelect }: ListItemProps) {
285
+ console.log('render', item.id); // 每次都执行
286
+ return (
287
+ <li onClick={onSelect}
288
+ style={{ background: isSelected ? '#eef' : 'white' }}>
289
+ {item.name}
290
+ </li>
291
+ );
292
+ }
293
+ ```
294
+
295
+ ### 修复代码
296
+
297
+ ```tsx
298
+ function ParentList() {
299
+ const [selectedId, setSelectedId] = useState<string | null>(null);
300
+ const [items, setItems] = useState<Item[]>(initialItems);
301
+
302
+ const handleSelect = useCallback((id: string) => {
303
+ setSelectedId(id);
304
+ }, []);
305
+
306
+ return (
307
+ <ul>
308
+ {items.map(item => (
309
+ <MemoizedListItem
310
+ key={item.id}
311
+ item={item}
312
+ isSelected={item.id === selectedId}
313
+ onSelect={handleSelect}
314
+ />
315
+ ))}
316
+ </ul>
317
+ );
318
+ }
319
+
320
+ // memo 阻止不必要的重渲染
321
+ const MemoizedListItem = memo(function ListItem({
322
+ item, isSelected, onSelect,
323
+ }: ListItemProps) {
324
+ return (
325
+ <li onClick={() => onSelect(item.id)}
326
+ style={{ background: isSelected ? '#eef' : 'white' }}>
327
+ {item.name}
328
+ </li>
329
+ );
330
+ });
331
+ ```
332
+
333
+ **检测方法**:React DevTools Profiler 的 "Why did this render?" 功能;`<React.StrictMode>` 下 double-render 检查。
334
+
335
+ ---
336
+
337
+ ## 5. 内联样式滥用
338
+
339
+ **问题**:大量使用内联 style 对象,导致无法复用、无法响应媒体查询、每次渲染创建新对象引发重渲染。
340
+
341
+ ### 问题代码
342
+
343
+ ```tsx
344
+ function Card({ highlighted }: { highlighted: boolean }) {
345
+ return (
346
+ <div style={{
347
+ padding: '16px',
348
+ borderRadius: '8px',
349
+ boxShadow: '0 2px 8px rgba(0,0,0,0.1)',
350
+ backgroundColor: highlighted ? '#fff3cd' : '#ffffff',
351
+ transition: 'all 0.3s ease',
352
+ // 无法定义 hover 状态
353
+ // 无法使用媒体查询
354
+ // 每次渲染创建新对象 → 子组件 memo 失效
355
+ }}>
356
+ <h3 style={{ fontSize: '18px', fontWeight: 600, marginBottom: '8px' }}>
357
+ Title
358
+ </h3>
359
+ </div>
360
+ );
361
+ }
362
+ ```
363
+
364
+ ### 修复代码
365
+
366
+ ```tsx
367
+ // 方案 1:CSS Modules
368
+ import styles from './Card.module.css';
369
+ import clsx from 'clsx';
370
+
371
+ function Card({ highlighted }: { highlighted: boolean }) {
372
+ return (
373
+ <div className={clsx(styles.card, highlighted && styles.highlighted)}>
374
+ <h3 className={styles.title}>Title</h3>
375
+ </div>
376
+ );
377
+ }
378
+
379
+ /* Card.module.css */
380
+ /*
381
+ .card {
382
+ padding: 16px;
383
+ border-radius: 8px;
384
+ box-shadow: 0 2px 8px rgba(0,0,0,0.1);
385
+ background-color: #ffffff;
386
+ transition: all 0.3s ease;
387
+ }
388
+ .card:hover { box-shadow: 0 4px 16px rgba(0,0,0,0.15); }
389
+ .highlighted { background-color: #fff3cd; }
390
+ .title { font-size: 18px; font-weight: 600; margin-bottom: 8px; }
391
+
392
+ @media (max-width: 768px) {
393
+ .card { padding: 12px; }
394
+ .title { font-size: 16px; }
395
+ }
396
+ */
397
+
398
+ // 方案 2:Tailwind CSS
399
+ function Card({ highlighted }: { highlighted: boolean }) {
400
+ return (
401
+ <div className={clsx(
402
+ 'p-4 rounded-lg shadow-md transition-all hover:shadow-lg',
403
+ highlighted ? 'bg-yellow-50' : 'bg-white'
404
+ )}>
405
+ <h3 className="text-lg font-semibold mb-2">Title</h3>
406
+ </div>
407
+ );
408
+ }
409
+ ```
410
+
411
+ **检测方法**:ESLint 规则 `react/no-inline-styles`(自定义);代码审查时关注 `style={{` 模式。
412
+
413
+ ---
414
+
415
+ ## 6. 无错误边界(Missing Error Boundaries)
416
+
417
+ **问题**:任何子组件的渲染错误会导致整个应用白屏崩溃,用户无法操作也无法获知原因。
418
+
419
+ ### 问题代码
420
+
421
+ ```tsx
422
+ // 没有错误边界,任何子组件异常 → 整个页面白屏
423
+ function App() {
424
+ return (
425
+ <div>
426
+ <Header />
427
+ <Dashboard /> {/* 如果 Dashboard 内部抛错,整个 App 崩溃 */}
428
+ <Footer />
429
+ </div>
430
+ );
431
+ }
432
+
433
+ function Dashboard() {
434
+ const data = useData();
435
+ // 如果 data.items 为 undefined,渲染时抛错
436
+ return (
437
+ <ul>
438
+ {data.items.map(item => <li key={item.id}>{item.name}</li>)}
439
+ </ul>
440
+ );
441
+ }
442
+ ```
443
+
444
+ ### 修复代码
445
+
446
+ ```tsx
447
+ // 通用错误边界组件
448
+ class ErrorBoundary extends Component<
449
+ { children: ReactNode; fallback?: ReactNode; onError?: (error: Error) => void },
450
+ { hasError: boolean; error: Error | null }
451
+ > {
452
+ state = { hasError: false, error: null };
453
+
454
+ static getDerivedStateFromError(error: Error) {
455
+ return { hasError: true, error };
456
+ }
457
+
458
+ componentDidCatch(error: Error, errorInfo: ErrorInfo) {
459
+ // 上报错误监控
460
+ reportError(error, errorInfo);
461
+ this.props.onError?.(error);
462
+ }
463
+
464
+ render() {
465
+ if (this.state.hasError) {
466
+ return this.props.fallback || (
467
+ <div role="alert" className="error-fallback">
468
+ <h2>页面出现异常</h2>
469
+ <p>{this.state.error?.message}</p>
470
+ <button onClick={() => this.setState({ hasError: false, error: null })}>
471
+ 重试
472
+ </button>
473
+ </div>
474
+ );
475
+ }
476
+ return this.props.children;
477
+ }
478
+ }
479
+
480
+ // 分区域包裹,互不影响
481
+ function App() {
482
+ return (
483
+ <div>
484
+ <Header />
485
+ <ErrorBoundary fallback={<DashboardError />}>
486
+ <Dashboard />
487
+ </ErrorBoundary>
488
+ <ErrorBoundary fallback={<div>侧边栏加载失败</div>}>
489
+ <Sidebar />
490
+ </ErrorBoundary>
491
+ <Footer />
492
+ </div>
493
+ );
494
+ }
495
+
496
+ // 同时做防御性编程
497
+ function Dashboard() {
498
+ const data = useData();
499
+ return (
500
+ <ul>
501
+ {(data?.items ?? []).map(item => <li key={item.id}>{item.name}</li>)}
502
+ </ul>
503
+ );
504
+ }
505
+ ```
506
+
507
+ **检测方法**:搜索项目中 `ErrorBoundary` 使用次数;关键路由至少一个。
508
+
509
+ ---
510
+
511
+ ## 7. 直接操作 DOM
512
+
513
+ **问题**:在 React/Vue 中直接使用 `document.querySelector`、`document.getElementById` 等操作 DOM,绕过虚拟 DOM 机制,导致状态不同步、内存泄漏。
514
+
515
+ ### 问题代码
516
+
517
+ ```tsx
518
+ function Modal({ isOpen }: { isOpen: boolean }) {
519
+ useEffect(() => {
520
+ if (isOpen) {
521
+ // 直接操作 DOM,绕过 React
522
+ document.body.style.overflow = 'hidden';
523
+ document.getElementById('modal-overlay')!.classList.add('visible');
524
+ document.querySelector('.modal-content')!.focus();
525
+ } else {
526
+ document.body.style.overflow = '';
527
+ document.getElementById('modal-overlay')!.classList.remove('visible');
528
+ }
529
+ }, [isOpen]);
530
+
531
+ return (
532
+ <div id="modal-overlay">
533
+ <div className="modal-content" tabIndex={-1}>Content</div>
534
+ </div>
535
+ );
536
+ }
537
+ ```
538
+
539
+ ### 修复代码
540
+
541
+ ```tsx
542
+ function Modal({ isOpen, onClose }: { isOpen: boolean; onClose: () => void }) {
543
+ const contentRef = useRef<HTMLDivElement>(null);
544
+
545
+ // body overflow 通过 effect 管理,清理时恢复
546
+ useEffect(() => {
547
+ if (isOpen) {
548
+ const original = document.body.style.overflow;
549
+ document.body.style.overflow = 'hidden';
550
+ return () => { document.body.style.overflow = original; };
551
+ }
552
+ }, [isOpen]);
553
+
554
+ // 聚焦通过 ref
555
+ useEffect(() => {
556
+ if (isOpen && contentRef.current) {
557
+ contentRef.current.focus();
558
+ }
559
+ }, [isOpen]);
560
+
561
+ if (!isOpen) return null;
562
+
563
+ return (
564
+ <div
565
+ className="fixed inset-0 bg-black/50 flex items-center justify-center"
566
+ onClick={onClose}
567
+ role="dialog"
568
+ aria-modal="true"
569
+ >
570
+ <div
571
+ ref={contentRef}
572
+ tabIndex={-1}
573
+ className="bg-white rounded-lg p-6"
574
+ onClick={e => e.stopPropagation()}
575
+ >
576
+ Content
577
+ </div>
578
+ </div>
579
+ );
580
+ }
581
+ ```
582
+
583
+ **检测方法**:在代码库中搜索 `document.getElementById`、`document.querySelector`、`document.getElementsBy`;除极少数场景(如 portal、第三方库集成),均应替换为 ref。
584
+
585
+ ---
586
+
587
+ ## 8. 无代码分割(Monolithic Bundle)
588
+
589
+ **问题**:整个应用打包为单个 JS 文件,首次加载传输数百 KB 甚至数 MB 的 JavaScript,导致首屏时间极长。
590
+
591
+ ### 问题代码
592
+
593
+ ```tsx
594
+ // 所有页面在入口文件静态导入
595
+ import Dashboard from './pages/Dashboard';
596
+ import Settings from './pages/Settings';
597
+ import Analytics from './pages/Analytics'; // 引入了 chart.js(500KB)
598
+ import AdminPanel from './pages/AdminPanel';
599
+ import UserProfile from './pages/UserProfile';
600
+ // ... 20 个页面全部静态导入
601
+
602
+ import { marked } from 'marked'; // 非首屏需要
603
+ import hljs from 'highlight.js'; // 非首屏需要
604
+ import * as XLSX from 'xlsx'; // 导出功能才用
605
+
606
+ function App() {
607
+ return (
608
+ <Routes>
609
+ <Route path="/" element={<Dashboard />} />
610
+ <Route path="/settings" element={<Settings />} />
611
+ <Route path="/analytics" element={<Analytics />} />
612
+ {/* ... */}
613
+ </Routes>
614
+ );
615
+ }
616
+ ```
617
+
618
+ ### 修复代码
619
+
620
+ ```tsx
621
+ import { lazy, Suspense } from 'react';
622
+
623
+ // 路由级懒加载
624
+ const Dashboard = lazy(() => import('./pages/Dashboard'));
625
+ const Settings = lazy(() => import('./pages/Settings'));
626
+ const Analytics = lazy(() => import(
627
+ /* webpackChunkName: "analytics" */ './pages/Analytics'
628
+ ));
629
+ const AdminPanel = lazy(() => import('./pages/AdminPanel'));
630
+
631
+ // 重型库按需导入
632
+ async function exportToExcel(data: unknown[]) {
633
+ const XLSX = await import('xlsx');
634
+ const worksheet = XLSX.utils.json_to_sheet(data);
635
+ const workbook = XLSX.utils.book_new();
636
+ XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
637
+ XLSX.writeFile(workbook, 'export.xlsx');
638
+ }
639
+
640
+ function App() {
641
+ return (
642
+ <Suspense fallback={<PageSkeleton />}>
643
+ <Routes>
644
+ <Route path="/" element={<Dashboard />} />
645
+ <Route path="/settings" element={<Settings />} />
646
+ <Route path="/analytics" element={<Analytics />} />
647
+ <Route path="/admin" element={<AdminPanel />} />
648
+ </Routes>
649
+ </Suspense>
650
+ );
651
+ }
652
+ ```
653
+
654
+ **检测方法**:`npx vite-bundle-visualizer`;首屏 JS 传输体积 > 200KB(gzip)即需分割。
655
+
656
+ ---
657
+
658
+ ## 9. CSS-in-JS 过度使用
659
+
660
+ **问题**:在高频渲染路径中使用运行时 CSS-in-JS(styled-components/emotion),每次渲染动态生成样式字符串并注入 DOM,造成性能开销。
661
+
662
+ ### 问题代码
663
+
664
+ ```tsx
665
+ import styled from 'styled-components';
666
+
667
+ // 列表中每个 item 都有动态样式 → 高频渲染时性能差
668
+ const ListItem = styled.li<{ isActive: boolean; color: string }>`
669
+ padding: 8px 16px;
670
+ background: ${props => props.isActive ? props.color : 'transparent'};
671
+ border-left: 3px solid ${props => props.isActive ? props.color : 'transparent'};
672
+ opacity: ${props => props.isActive ? 1 : 0.7};
673
+ transition: all 0.2s;
674
+ &:hover {
675
+ background: ${props => props.color}22;
676
+ }
677
+ `;
678
+
679
+ function BigList({ items }: { items: Item[] }) {
680
+ return (
681
+ <ul>
682
+ {items.map(item => (
683
+ // 1000 个 item,每个都生成不同的样式类
684
+ <ListItem key={item.id} isActive={item.active} color={item.color}>
685
+ {item.name}
686
+ </ListItem>
687
+ ))}
688
+ </ul>
689
+ );
690
+ }
691
+ ```
692
+
693
+ ### 修复代码
694
+
695
+ ```tsx
696
+ // 方案 1:CSS Modules + CSS 变量(零运行时开销)
697
+ import styles from './BigList.module.css';
698
+
699
+ function BigList({ items }: { items: Item[] }) {
700
+ return (
701
+ <ul>
702
+ {items.map(item => (
703
+ <li
704
+ key={item.id}
705
+ className={`${styles.item} ${item.active ? styles.active : ''}`}
706
+ style={{ '--item-color': item.color } as CSSProperties}
707
+ >
708
+ {item.name}
709
+ </li>
710
+ ))}
711
+ </ul>
712
+ );
713
+ }
714
+
715
+ /* BigList.module.css */
716
+ /*
717
+ .item {
718
+ padding: 8px 16px;
719
+ opacity: 0.7;
720
+ transition: all 0.2s;
721
+ border-left: 3px solid transparent;
722
+ }
723
+ .item:hover { background: color-mix(in srgb, var(--item-color) 13%, transparent); }
724
+ .active {
725
+ background: var(--item-color);
726
+ border-left-color: var(--item-color);
727
+ opacity: 1;
728
+ }
729
+ */
730
+
731
+ // 方案 2:如果必须用 CSS-in-JS,选择零运行时方案
732
+ // 如 vanilla-extract、Linaria、Panda CSS
733
+ import { style } from '@vanilla-extract/css';
734
+
735
+ export const item = style({
736
+ padding: '8px 16px',
737
+ opacity: 0.7,
738
+ transition: 'all 0.2s',
739
+ });
740
+ ```
741
+
742
+ **检测方法**:React DevTools Profiler 中观察 styled 组件渲染耗时;列表场景中比较 CSS Modules vs styled-components 的帧率。
743
+
744
+ ---
745
+
746
+ ## 10. 无类型检查(No Type Safety)
747
+
748
+ **问题**:整个项目使用纯 JavaScript 或大量 `any`/`as any`,编译期无法捕获类型错误,只能在运行时暴露。
749
+
750
+ ### 问题代码
751
+
752
+ ```tsx
753
+ // 全 any,IDE 无法提供补全和错误提示
754
+ function processOrder(order: any) {
755
+ const total = order.items.reduce((sum: any, item: any) => {
756
+ return sum + item.price * item.qty;
757
+ }, 0);
758
+
759
+ // 拼写错误,运行时才发现
760
+ return {
761
+ orderId: order.id,
762
+ toal: total, // typo: toal → total
763
+ stauts: 'confirmed', // typo: stauts → status
764
+ };
765
+ }
766
+
767
+ // API 响应无类型
768
+ async function fetchUser(id: string) {
769
+ const res = await fetch(`/api/users/${id}`);
770
+ const data = await res.json(); // data: any
771
+ return data;
772
+ }
773
+
774
+ // 事件处理无类型
775
+ function handleClick(e: any) {
776
+ console.log(e.terget.value); // typo: terget → target,运行时才报错
777
+ }
778
+ ```
779
+
780
+ ### 修复代码
781
+
782
+ ```tsx
783
+ // 定义明确类型
784
+ interface OrderItem {
785
+ id: string;
786
+ name: string;
787
+ price: number;
788
+ qty: number;
789
+ }
790
+
791
+ interface Order {
792
+ id: string;
793
+ items: OrderItem[];
794
+ customer: Customer;
795
+ }
796
+
797
+ interface OrderResult {
798
+ orderId: string;
799
+ total: number;
800
+ status: 'confirmed' | 'pending' | 'cancelled';
801
+ }
802
+
803
+ function processOrder(order: Order): OrderResult {
804
+ const total = order.items.reduce(
805
+ (sum, item) => sum + item.price * item.qty,
806
+ 0
807
+ );
808
+
809
+ return {
810
+ orderId: order.id,
811
+ total, // 类型检查确保字段名正确
812
+ status: 'confirmed',
813
+ };
814
+ }
815
+
816
+ // API 响应类型化
817
+ interface UserResponse {
818
+ id: string;
819
+ name: string;
820
+ email: string;
821
+ }
822
+
823
+ async function fetchUser(id: string): Promise<UserResponse> {
824
+ const res = await fetch(`/api/users/${id}`);
825
+ if (!res.ok) throw new ApiError(res.status, await res.text());
826
+ return res.json() as Promise<UserResponse>;
827
+ }
828
+
829
+ // 运行时校验(zod)
830
+ import { z } from 'zod';
831
+
832
+ const UserSchema = z.object({
833
+ id: z.string(),
834
+ name: z.string(),
835
+ email: z.string().email(),
836
+ });
837
+
838
+ async function fetchUserSafe(id: string) {
839
+ const res = await fetch(`/api/users/${id}`);
840
+ const data = await res.json();
841
+ return UserSchema.parse(data); // 运行时类型校验
842
+ }
843
+
844
+ // 事件类型
845
+ function handleClick(e: React.MouseEvent<HTMLButtonElement>) {
846
+ console.log(e.currentTarget.value); // IDE 自动补全,编译期检查
847
+ }
848
+ ```
849
+
850
+ **检测方法**:
851
+
852
+ ```bash
853
+ # 统计 any 使用数量
854
+ grep -r ":\s*any" --include="*.ts" --include="*.tsx" src/ | wc -l
855
+
856
+ # TypeScript 严格模式
857
+ # tsconfig.json
858
+ {
859
+ "compilerOptions": {
860
+ "strict": true,
861
+ "noImplicitAny": true,
862
+ "strictNullChecks": true,
863
+ "noUncheckedIndexedAccess": true
864
+ }
865
+ }
866
+
867
+ # ESLint 规则
868
+ # @typescript-eslint/no-explicit-any: error
869
+ # @typescript-eslint/no-unsafe-assignment: warn
870
+ ```
871
+
872
+ ---
873
+
874
+ ## Agent Checklist
875
+
876
+ - [ ] 项目中无超过 3 层的 Prop Drilling(必要时使用 Context 或状态管理)
877
+ - [ ] 单个组件文件不超过 300 行;超过则拆分为子组件 + 自定义 Hook
878
+ - [ ] 所有 useEffect 已审查:无派生状态计算、无事件响应逻辑
879
+ - [ ] 列表渲染使用 `React.memo` + `useCallback` 防止不必要重渲染
880
+ - [ ] 无大范围内联样式;使用 CSS Modules / Tailwind / 零运行时 CSS-in-JS
881
+ - [ ] 关键路由均有 ErrorBoundary 包裹
882
+ - [ ] 无直接 DOM 操作(`document.querySelector` 等),统一使用 ref
883
+ - [ ] 路由级和重型库已做代码分割(`lazy` + 动态 `import()`)
884
+ - [ ] 高频渲染路径无运行时 CSS-in-JS 性能问题
885
+ - [ ] TypeScript `strict: true` 已启用;`any` 使用不超过总类型注解的 5%
886
+ - [ ] 以上各项均有对应 ESLint 规则或 CI 检查保障