『一次开发,多端运行』是研发同学所追求的极致效率,如何用一套代码逻辑解决 Android / iOS 双端的开发向来是客户端工程师们所头疼的问题。而在当前的跨平台开发范式中,由 Google 开源的 Flutter 成为了最受欢迎的方案之一。 在 2022 年 5 月举办的 Google I / O 大会上,Flutter 3.0 版本正式发布,开发者可以通过一个代码库立足 iOS、Android、Web、Windows、macOS、Linux 六大平台,大会数据显示目前全球已经有超过 50 万应用由 Flutter 构建完成。 字节跳动是 Flutter 的深度用户,早在其开源之初便投入了深度的使用、优化与反馈共建。截至 2021 年,字节跳动有超过 70 多款 App 使用 Flutter 开发,累计有超过 600 多位 Flutter 开发者。针对 Flutter 落地过程中出现过的包体积过大、性能收益不明显等问题,字节跳动技术团队均做了大量的优化,并向社区提报大量 PR 并被成功 merge。
在我们之前分享的《Dutter | 钉钉 Flutter 跨四端方案设计与技术实践》《Dutter | 前车之鉴:聊聊钉钉 Flutter 落地桌面端踩过的“坑”》文章中,有为大家简单介绍过钉钉 Flutter 桌面端应用的一些情况。在文章中我们有提到,因为需要支持多窗口、窗口内嵌等场景,在桌面端我们无法使用 FlutterBoost 一类的中间件来共享 FlutterEngine,只能采用多引擎方案来驱动多画布同时渲染。 此方案虽然能满足现阶段钉钉业务使用,但未来随着业务盖度、复杂度的提升,方案的弊端也愈加明显:引擎启动偶现卡顿、首帧耗时略长、内存占用高等。尤其是钉钉 Windows 端因为32位兼容问题,目前仍以 JIT 模式在运行 Flutter 页面,情况相比 AOT 模式更加差一些。以钉钉 Windows 目前线上业务为例,若不做任何优化,启动首帧展示耗时大概在 1000ms~2600ms 之间,每个引擎内存占用大概在 70MB 左右。 我们选择基于 Flutter 来构建钉钉跨4+端研发框架(Dutter) 的主要初衷即看中其在性能和体验上具备可媲美 Native 运行