Dart Academy · 课时

执行计算密集型任务而不卡顿

让主 isolate 保持响应

第 4 / 4 课13 个步骤

执行计算密集型任务而不卡顿 是 CoddyKit 上的免费 Dart Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Dart Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Dart Academy 课程共包含 4 节课。

什么是卡顿

卡顿是指界面错过一帧时出现的明显停顿。当繁重的工作长时间占用主隔离单元时,就会发生卡顿。😬

帧预算

在 60fps 下,每帧大约只有 16 毫秒。如果主隔离单元耗尽了这段预算,屏幕就会短暂冻结。

找出罪魁祸首

请留意占用大量 CPU 的任务:解析大型 JSON、应用图像滤镜、加密或进行大型排序。这些都是造成卡顿的典型原因。

解决方法

将这些繁重的工作移到另一个隔离单元。主隔离单元可以继续绘制画面,同时由工作单元并行处理任务。

Flutter 的计算函数

在 Flutter 中,计算函数辅助工具会为您封装隔离单元。传入一个函数和一个参数,然后等待结果即可。

final parsed = await compute(parseJson, rawText);

计算函数与 Isolate.run

计算函数接收一个函数和一个参数;Isolate.run 接收一个闭包。两者都会在线程外执行单个任务,并返回一个 Future。

保持有效载荷简洁

在隔离单元之间复制数据需要耗费时间。只发送任务需要的数据,并且只返回您实际使用的精简结果。

批量处理,不要频繁通信

跨越隔离单元边界并不是免费的。与其来回发送许多很小的消息,不如优先进行一次批量交接。

重复任务要复用

如果同一个任务经常运行,那么长期存在的已创建隔离单元比每次都新建一个更好。通过复用来跳过启动开销。

先进行测量

不要凭猜测决定。请使用 DevTools 进行性能分析,先找出真正导致掉帧的工作,再将其移到隔离单元中。

I/O 交给异步处理

等待网络或磁盘并不属于 CPU 运算,因此普通的异步处理已经可以保持流畅。请将隔离单元留给真正的计算任务。

快速检查

哪个任务最值得放到独立的隔离单元中?

回顾

要消除卡顿,请先进行性能分析,然后通过计算函数或 Isolate.run 将占用大量 CPU 的工作移到隔离单元。保持有效载荷小巧,让界面保持流畅。✅

免费开始

用 AI 导师学习 Dart — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「执行计算密集型任务而不卡顿」课时是免费的吗?

是的 — 「执行计算密集型任务而不卡顿」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Dart Academy 课程的其余内容,请升级到 CoddyKit PRO。 Dart Academy 课程共包含 4 节课。

「执行计算密集型任务而不卡顿」这节课中我会学到什么?

让主 isolate 保持响应 你通过在浏览器中直接运行的动手代码来练习 Dart Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Dart Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Dart Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「执行计算密集型任务而不卡顿」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Dart Academy 课中编写并运行代码吗?

能。每节 Dart Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 为什么使用 Isolate,而不是线程
  2. 使用 Isolate.run 快速卸载任务
  3. 生成 isolate 与消息传递
  4. 执行计算密集型任务而不卡顿
← 返回 Dart Academy