SuperAPI AI 工具集

angular-best-practices-v20

编程与开发

查看项目

更新于 10-15 14:49

技能介绍

用途

Angular Best Practices (v20+) 是一份针对 Angular 20 及以上版本应用的性能优化指南,围绕 Signals、httpResource、signal inputs/outputs、@defer 块和原生控制流语法等现代特性展开。它包含 8 个类别、35 条以上规则,并按影响程度划分优先级,用于指导自动化重构和代码生成。

何时适用

在以下场景中可参考这些指南:

  • 编写新的 Angular 20+ 组件
  • 使用 Signals 进行响应式状态管理(signal、computed、linkedSignal、effect)
  • 使用 httpResource/resource 进行数据获取
  • 使用 signal inputs/outputs 替代装饰器
  • 实现 @defer 进行懒加载
  • 使用原生控制流(@if、@for、@switch)
  • 实现带增量水合的 SSR
  • 审查代码中的性能问题

主要能力(v20+ 关键特性)

  • Signals:细粒度响应式(signal、computed、linkedSignal、effect)
  • httpResource:基于 Signal 的 HTTP,带自动加载状态
  • Signal inputs/outputs:用 input()、output() 替代装饰器
  • @defer:模板级懒加载,支持水合触发条件
  • @for / @if:原生控制流,@for 要求提供 track
  • 默认独立组件:无需再写 standalone: true
  • Host bindings:用 host 对象替代 @HostBinding 装饰器
  • 函数式拦截器:更简单的 HTTP 拦截器
  • takeUntilDestroyed:内置订阅清理
  • 增量水合:@defer (hydrate on ...) 用于 SSR

规则分类与优先级

优先级 类别 影响 前缀
1 变更检测 CRITICAL change-
2 打包与懒加载 CRITICAL bundle-
3 RxJS 优化 HIGH rxjs-
4 模板性能 HIGH template-
5 依赖注入 MEDIUM-HIGH di-
6 HTTP 与缓存 MEDIUM http-
7 表单优化 MEDIUM forms-
8 通用性能 LOW-MEDIUM ssr-

快速参考

1. 变更检测(CRITICAL)

  • change-signals:使用 Signals 替代 BehaviorSubject 管理响应式状态
  • change-onpush:使用 OnPush 变更检测策略
  • change-detach-reattach:对重操作分离变更检测器
  • change-run-outside-zone:在 NgZone 之外运行非 UI 代码
  • component-signal-io:使用 signal inputs/outputs 替代 @Input/@Output 装饰器
  • signal-computed-pure:保持 computed() 纯净,无副作用
  • signal-effect-patterns:正确使用 effect(),避免反模式
  • signal-linkedsignal:使用 linkedSignal 处理派生且可写状态

2. 打包与懒加载(CRITICAL)

  • bundle-standalone:使用独立组件(v20+ 默认)
  • bundle-lazy-routes:用 loadComponent/loadChildren 懒加载路由
  • bundle-defer:对重型组件使用 @defer 块
  • bundle-preload:在悬停/聚焦时预加载路由以提升感知速度
  • bundle-no-barrel-imports:避免 barrel 文件,使用直接导入

3. RxJS 优化(HIGH)

  • rxjs-async-pipe:使用 async 管道替代手动订阅
  • rxjs-takeuntil:使用 takeUntilDestroyed 自动清理
  • rxjs-share-replay:共享 observable 以避免重复请求
  • rxjs-operators:使用高效的 RxJS 操作符
  • rxjs-mapping-operators:使用正确的映射操作符(switchMap 与 exhaustMap)
  • rxjs-no-nested-subscribe:避免嵌套订阅

4. 模板性能(HIGH)

  • template-trackby:在 @for 循环中使用 track 函数(v20+ 必需)
  • template-pure-pipes:对昂贵转换使用纯管道
  • template-ng-optimized-image:使用 NgOptimizedImage 优化图片
  • template-no-function-calls:避免在模板中调用函数
  • template-virtual-scroll:对大型列表使用虚拟滚动

5. 依赖注入(MEDIUM-HIGH)

  • di-provided-in-root:对单例服务使用 providedIn: 'root'
  • di-injection-token:对非类依赖使用 InjectionToken
  • di-factory-providers:对复杂初始化使用工厂提供者
  • directive-host-composition:使用 hostDirectives 进行组合

6. HTTP 与缓存(MEDIUM)

  • http-resource:使用 httpResource/resource 进行基于 Signal 的数据获取
  • http-interceptors:使用函数式拦截器处理横切关注点
  • http-transfer-state:使用 TransferState 进行 SSR 水合
  • routing-signal-inputs:使用基于 Signal 的路由输入

7. 表单优化(MEDIUM)

  • forms-reactive:使用带类型 FormGroup 的响应式表单

8. 通用性能(LOW-MEDIUM)

  • ssr-hydration:使用 @defer (hydrate on ...) 进行增量水合
  • perf-memory-leaks:防止内存泄漏(定时器、监听器、订阅)
  • perf-web-workers:将重计算卸载到 Web Workers
  • arch-smart-dumb-components:使用智能/哑组件模式

使用方式

阅读各规则文件以获取详细说明和代码示例:

  • rules/change-signals.md
  • rules/bundle-defer.md
  • rules/http-resource.md

每个规则文件包含:

  • 为何重要的简要说明
  • 带说明的错误代码示例
  • 带说明的正确代码示例
  • 额外上下文与参考

完整编译文档

如需包含所有规则展开的完整指南:AGENTS.md

限制

资料未提供该指南的收费、价格、平台支持范围或具体使用效果等信息。