EngineGroup:让 Flutter 桌面端引擎 “飘” 起来
摘要
在我们之前分享的《Dutter | 钉钉 Flutter 跨四端方案设计与技术实践》《Dutter | 前车之鉴:聊聊钉钉 Flutter 落地桌面端踩过的“坑”》文章中,有为大家简单介绍过钉钉 Flutter 桌面端应用的一些情况。在文章中我们有提到,因为需要支持多窗口、窗口内嵌等场景,在桌面端我们无法使用 FlutterBoost 一类的中间件来共享 FlutterEngine,只能采用多引擎方案来驱动多画布同时渲染。
此方案虽然能满足现阶段钉钉业务使用,但未来随着业务盖度、复杂度的提升,方案的弊端也愈加明显:引擎启动偶现卡顿、首帧耗时略长、内存占用高等。尤其是钉钉 Windows 端因为32位兼容问题,目前仍以 JIT 模式在运行 Flutter 页面,情况相比 AOT 模式更加差一些。以钉钉 Windows 目前线上业务为例,若不做任何优化,启动首帧展示耗时大概在 1000ms~2600ms 之间,每个引擎内存占用大概在 70MB 左右。
我们选择基于 Flutter 来构建钉钉跨4+端研发框架(Dutter) 的主要初衷即看中其在性能和体验上具备可媲美 Native 运行的能力,在完成前期基础设施搭建和核心链路验证之后,多引擎下的性能问题已成为阻碍我们达成既定目标的主要障碍,需要攻坚解决掉。
本文主要为大家介绍一下我们在此问题上探索方向以及最终方案,并以实际应用收益来为做一个直观展示,希望能为关注此领域的同学和团队提供一定参考。
欢迎在评论区写下你对这篇文章的看法。