mcpField
D
dart-optimization

dart-optimization

github.com/dhruvanbhalara开发30270 次安装8 周前更新
代码仓库

关于 dart-optimization

面向需要优化、调试和健全错误处理指导的 Dart 开发者。内容涵盖类型安全、集合与循环实践、编译期模式、性能分析、基准测试,以及 Flutter 热重载与重启。

主要功能

  1. 01Dart 类型与空安全指导
  2. 02集合和热点循环实践
  3. 03编译期优化模式
  4. 04CPU 性能分析与基准测试
  5. 05热重载与重启指导

适用场景

  1. 01检查 Dart 代码中的性能问题
  2. 02为性能关键路径选择集合
  3. 03排查 CPU 密集型函数
  4. 04处理空值与可恢复异常

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dhruvanbhalara/skills --skill dart-optimization

安装后在 Claude Code 中输入/dart-optimization确认已加载。

详细介绍

优化与调试

Dart 的性能不仅关乎 UI 渲染,还涉及高效执行、合理利用资源和妥善处理错误。

Dart 性能模式

  • 统一类型:避免使用 dynamic。使用显式类型或 Object?。静态类型代码能让编译器进行更出色的优化。
  • 高效集合:
    • 使用 Set 进行平均时间复杂度为 O(1) 的包含性检查。
    • 使用 List 进行有序索引。
    • 优先使用 Iterable 方法(map、where)以提高可读性,但在性能关键的热点路径中使用 for 循环。
  • 内联:VM/AOT 通常会内联简单的 getter 和琐碎函数;保持代码简洁有助于确保这一优化生效。

编译时优化

  • Final 和 Const:尽可能将变量声明为 final。为 widget 和数据模型使用 const 构造函数,以支持编译时分配并减少运行时垃圾回收压力。
  • 三元表达式与 If-Else:在 Dart 中,两者通常效果相同,但应优先考虑可读性。使用 switch 表达式(Dart 3+)进行完备且高效的模式匹配。
  • 扩展类型:使用 Dart 3.3+ 的 extension type 零开销抽象来封装类型,以消除运行时分配开销(参见 dart-modern-syntax)。
  • 私有命名参数:使用 Dart 3.12+ 的 MyClass({this._privateField}) 构造函数,消除初始化列表中的样板代码(参见 dart-modern-syntax)。

热点路径与循环

  • 减少循环中的工作量:将计算和对象创建移到循环外。
  • 集合字面量:使用 [] 或 {} 字面量语法,而非 List() 等构造函数,以简化代码并获得轻微的性能提升。

类型系统与健全性

遵循 Dart 的健全类型系统,以防止运行时出现无效状态。

  • 方法重写: 保持健全的返回类型(协变)和参数类型(逆变)。除非显式标记 covariant 关键字,否则不要在子类中收窄参数类型。
  • 泛型与集合: 为泛型类添加显式类型注解(例如 List<T>)。不要将 List<dynamic> 赋值给有类型的列表。
  • 向下转型: 避免从 dynamic 隐式向下转型。必要时使用显式转型(例如 as List<Cat>),但要确保底层运行时类型匹配,以防止出现 TypeError 异常。
  • 严格转型: 在 analysis_options.yaml 中启用 strict-casts: true,以强制进行显式转型,并在编译时捕获隐式向下转型错误。

空安全与错误处理

正确管理变量初始化和可空性,消除与空安全相关的静态错误。

  • 修饰符: 可空类型使用 ?,空断言使用 !,不可为 null 的命名参数使用 required。
  • 延迟初始化: 对保证在使用前初始化的非空变量使用 late 关键字。
  • 捕获: 捕获可恢复故障的 Exception 子类型。
  • 错误: 不要显式捕获 Error 或其子类型(例如 TypeError、ArgumentError)。错误表示必须修复而非捕获的编程缺陷。
  • 重新抛出: 在 catch 块中使用 rethrow 传播异常,同时保留其原始堆栈跟踪。

性能分析与调试

  • DevTools CPU 性能分析器:识别热点路径和“耗时”函数。
  • 基准测试:使用 package:benchmark_harness 对非 UI 逻辑进行科学的性能测量。
  • 热重载与重启:UI 更改使用热重载。状态初始化或深层逻辑更改导致运行时错误时,使用热重启清除状态树。

评论

支持 Markdown