关于 dart-optimization
面向需要优化、调试和健全错误处理指导的 Dart 开发者。内容涵盖类型安全、集合与循环实践、编译期模式、性能分析、基准测试,以及 Flutter 热重载与重启。
主要功能
- 01Dart 类型与空安全指导
- 02集合和热点循环实践
- 03编译期优化模式
- 04CPU 性能分析与基准测试
- 05热重载与重启指导
适用场景
- 01检查 Dart 代码中的性能问题
- 02为性能关键路径选择集合
- 03排查 CPU 密集型函数
- 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