字节跳动为什么选用Flutter:并非跨平台终极之选,但它可能是不一样的未来
Flutter 大火背后的原因是什么?为什么越来越多的企业,和开发者会选择使用 Flutter?Flutter 会成为跨平台开发的终极,之选吗?...
作者 | 袁辉辉
策划 | Kitty
2018 年 12 月 ,Google 宣布 Flutter 1.0 版本正式发布。截至目前, Flutter 在 Github 上已获得 88000+ 的关注和 11000+ 的 Fork ,其发展速度相当惊人,是今年移动端最火热的开发,框架之一。
Flutter 大火背后的原因是什么?为什么越来越多的企业,和开发者会选择使用 Flutter?Flutter 会成为跨平台开发的终极,之选吗?
近日,InfoQ 有幸采访到字节,跳动移动平台部 Flutter 架构师、知名博客 Gityuan 博主袁辉辉,他针对上述问题作了回应。他表示“ Flutter 并非跨平台终极之选,最初选择 Flutter,不是因为它一定会,成为未来终极之选,而是因为它有可能成为,不一样的未来。”此外,他还会在即将召开的 QCon 全球软件开发大会 2020(北京站)上分享《字节跳动 Flutter 大规模业务落地与架构,优化实战》,感兴趣的读者可以关注。
以下为袁辉辉(袁,辉辉)的采访内容整理。
Flutter 大火的原因
我认为 Flutter 之所以大火,主要是以下几个原因:
一、现有跨平台技术存在缺陷
二、研发效率就是竞争力
三、集漂亮与流畅集于一身
字节跳动选择 Flutter 的初心
听到这里给人的感觉是,对于 Web 工程师而言 Flutter 应该容易上手。我跟公司很多,正在使用或者调研 Flutter 的业务团队做过沟通,发现客户端比前端,的同学对 Flutter 接受度更高,我个人从 Android 端技术出身,的确觉得学习 Flutter 还是非常容易上手的,但公司内前端的同学对 Flutter 使用的吐槽会多一点。所以,我认为 Flutter 更像是以客户端视角,的跨平台技术,Flutter 与其说是大前端技术,不如说是大移动端技术。Flutter 发展的 Roadmap 也是先全面支持 Android/iOS 端能力,再进一步完善 Web 端能力支持的。
字节跳动对于客户端技术还是,非常重视的,字节跳动有很多客户端,工程师,之前客户端深入点的基础技术更多,是搞插件化、热修复、性能优化、安全加固等,跨平台方向一直都是前端工程师在,不遗余力地推进,属于大前端方向。而 Flutter 是客户端更有主导,的跨平台技术方案。另外说明,字节跳动并不是说,只有一套跨平台技术栈,公司内部也是多套,跨端技术栈并存,也包括自研的方案。
在字节跳动,跨平台技术并没有形成,大规模的落地,之前也提到没有历史包袱,所以在面对跨平台,技术选型的时候,更关注跨平台技术的技术上限,以及发展潜力,自渲染技术的 Flutter 可以理解为更彻底更纯粹,的跨平台技术,伴随着媲美原生的流畅度,这便是我们选择 Flutter 的初心。
Flutter 落地过程中的“坑”
Flutter 虽潜力上限很高,但仍需打磨和雕琢,我们在 Flutter 推动过程中遇到很多问题,比如包体积过大的问题、性能达不到预期、对混合工程的支持,不够友好、各宿主 Flutter 引擎版本不一致、基础库不完善、Flutter 改造后各项数据打平等。除此之外,还有很多非技术的困难,比如业务团队并不认可 Flutter 新技术,工程师缺乏 Flutter 经验,担忧审核风险等,都会影响业务方是否采用 Flutter 技术,每一个困难都需要去解决,不然就难以落地。下面就其中两个难点,我来展开聊一下。
一、包体积问题
https://github.com/flutter/flutter/issues/40345
二、性能优化问题
https://github.com/flutter/flutter/issues/47771
Flutter 是一个自渲染,的跨平台技术,有着很高的性能上限,但并不代表现在性能,各方面都很优秀,毕竟 Flutter 作为一个“新生儿”,还是有一些需要进一步改造,的地方。除性能工具改造之外,其实在 Flutter 落地场景中,我们也解决了不少,性能问题,同时优化了自身的引擎,比如 UI 预加载策略、Flutter Turbo 技术、Vsync 调度策略等,让引擎提速,争取让 Flutter 性能发挥到极致。
Flutter 在业务层面的发展阻力
不过,现阶段 Flutter 的发展仍有一些阻力:
一、Flutter 采用的是 Dart 语言,没能引入前端成熟的,生态体系
二、开源库相对比较欠缺,更新频次不足
三、跟原生系统生态存在着一定,的竞争关系
另外,苹果商店的审核风险,也是大家所担忧的,官方的公告原意是说应用程序的核心特性和功能必须,包含在软件的二进制文件中,而不是通过类似 HTML5 的技术来实现动态更新,苹果要打压的是动态,更新技术,考虑到 Flutter 的合规性,Google 主动把 Flutter 的 iOS 动态化能力去掉了,Flutter 最终打包生成的产物就是 IPA,Flutter 其实是完全符合规范的,甚至还有使用 Flutter 开发的应用还被 Apple 推荐过。相反,React Native、Weex、H5 等技术都是一种动态化,解决方案,这正是苹果要管控的,目前苹果的态度更多的,是不提倡,但也不保证不封杀。即便如此,苹果不希望原生开发生态被其他,跨平台技术抢占,苹果也在不断推行 SwiftUI 框架,力图抵挡 Flutter 等跨平台技术对原生开发,的餐食。Flutter 未来要加强推进步伐,让更多的大型 App 通过 Flutter 技术得到收益,只有用户群体上来,未来的地位和,话语权才会更高,就像现在小程序,原则上是不符合苹果,的审核要求的,但各大型应用基本都上线了,小程序功能,目前来看不至于说,苹果把小程序直接干掉。
Flutter 并非跨平台终极之选
未来一段时间,还应该是多套跨平台,技术并存的时代, 目前 Flutter 也没有全面做到可以碾压,其他跨平台技术,可根据团队以及业务特点,来考虑更适合的方案。有一定客户端经验的,同学入手 Flutter 会更快一些,如果团队在 React Native 上有很好落地,业务没有遇到性能等瓶颈,且团队缺少客户端能力,建议先做技术调研和沉淀,不要盲目追求新技术,只有当团队有能力且,业务有需求的情况下,建议再考虑切换技术栈。
我们前面提到过,一直备受关注且神秘的 Fuchsia 系统在 UI 框架上使用的也是 Flutter。Fuchsia 是 Google 开发的下一代操作系统。Fuchsia 是采用全新模块化设计,思想、跨平台框架技术的系统。它能支持快捷裁剪定制,更能适应未来,的多元化设备,包含手机、平板、笔记本、路由器、智能设备、机器人等,Fuchsia 有可能成为一个全新,的跨全平台的通用操作系统。
在现阶段,开始尝试探索和积累沉淀 Flutter 技术能力,并在业务上使用 Flutter 技术的应用,从战略上来将,已经处于领先。选择 Flutter,正可谓是“进可攻退可守”,往前进一步,Flutter 应用未来可无缝迁移到 Fuchsia 系统,借用 Fuchsia 系统的能量扩展到更广泛,的用户场景;退一步,Flutter 技术自身在 Android/iOS 平台的表现相比其他,跨平台技术已经是很优秀。
最初选择 Flutter,不是因为它一定会,成为未来终极之选,而是它有可能成为不一样,的未来。
Flutter 展望:终将走向多端一体化
随着科技的发展,5G 时代的到来,人工智能的日趋成熟,端到底会有哪些变化?是否会出现新的操作系统?系统的 UI 架构是否会出现新的变革?Android/iOS 平台是否能与之并存?搭载 Flutter UI 框架的 Fuchsia 系统能否在 IOT 领域以及新的交互方式,大放异彩,再领风骚?是否有万物互联互通的,超级平台出现?
技术在不断演变,中螺旋前进,平台自身也随之演进,未来 Flutter 会朝着多端,一体化的方向发展,能支持更多的端(包括平板、笔记本、智能设备等)。作为一套跨平台的 UI 框架,Flutter 采用自渲染的技术方案,是一个上限很高,的跨平台技术,但 Flutter 更重要的是需要提升工程化能力,以及生态圈的建设,才能吸引更多的开发者,加入。
采访嘉宾介绍
袁辉辉,就职于字节跳动,在移动平台部担任 Flutter 架构师,主要负责 Flutter 性能架构。曾在小米、联想、IBM 任职,从事 Android 系统框架底层优化与,开发工作。他是知名博客 Gityuan 的博主,对 Android/Flutter 有着深刻的理解,编写了近 200 篇高质量相关原创技术,文章。
活动推荐
在 QCon 北京 2020 的分享中,袁辉辉(袁辉辉),老师将介绍如何改进 Flutter 面临的问题和挑战,如何优化 Flutter 架构,如何提升体验。点击「阅读原文」或识别二维码了解更多,跨平台、端侧 AI、Serverless、FaaS、微前端等大前端实践及前沿,技术落地关键进展。现在购票可享 7 折限时折扣,还有门票买三赠一、买五赠二更多优惠。活动仅持续到本月底(3 月 31 日),赶快抓紧时间联系票务,小姐姐 Ring 吧:17310043226(微信同号)
关注 前端之巅
微信扫一扫关注公众号