国内Flutter开发现状
前⼏天有个做前端的同学问我,“现在 Flutter ⾮常⽕,要不要跟进学习?”对于这类问题,我的回复是,要判断这个框架是否值得学习,我们需要先弄清楚这个框架的来⻰去脉、框架原理以及同类竞品等信息,通过横向和纵向的比较来判断是否需要跟进。
总的来说,Flutter作为⾕歌推出的⼀个跨平台移动应⽤开发框架,可以帮助开发者快速在 iOS 、 Android上构建⾼质量的原⽣⽤户界⾯,并且还可以用它开发Web前端应用和桌面应用。Flutter 技术的出现本身就切中了⼤前端开发者的痛点,再加上Flutter革命性的使用Skia作为渲染引擎,大大的还原了原生开发的体验。可以说,虽然目前是多种跨平台开发技术并存的局面,但是Flutter代表了跨平台技术的未来,所以是值得跟进的。
Flutter框架简析
Flutter 是⾕歌推出的⼀个跨平台移动应⽤开发框架,可以帮助开发者快速在移动 iOS 、Android 上构建⾼质量的原⽣⽤户界⾯,同时还支持开发Web和桌面应用。自2018 年 12 ⽉ Flutter 1.0 版本发布以来,Flutter已经发布了多个版本。截⾄⽬前, Flutter 在 GitHub 上已经获得了 93.1K 的 Star 和 12.6K的 Fork ,发展速度相当惊⼈。目前,Flutter的热度和关注度已经⽼牌跨平台框架 React Native,React Native ⽬前在 GitHub 上有 87.5K Star 和 19.4K Fork。
那 Flutter 作为⼀个新兴框架为什么会这么⽕呢?之所以受到广大开发者的喜爱,是背后源于移动开发者们对于“⼀套代码,多端运⾏”的孜孜追求。
众所周知,移动系统与终端设备的碎⽚化,让开发⼈员不得不同时开发和维护多套代码,开发效率和维护成本大打折扣。移动互联网的快速发展,也让开发工作发展成如何更高效、更低成本地开发。众所周知,传统的原生开发技术虽然技术成熟,但由于开发效率和成本的限制,已经越来越无法满足移动互联网应用的快速迭代的需求,此时移动跨平台技术成为移动互联网行业发展的迫切需求。
目前,主流的移动跨平台技术主要分为三类,一类是使用原生内置浏览器加载HTML5的Hybrid技术方案,采用此种方案的主要有Cordova、Ionic和微信小程序;另一类是使用JavaScript语言进行开发,然后使用原生组件进行渲染,采用此方案的主要有React Native、Weex和快应用;最后一类是使用自带的渲染引擎和自带的原生组件来实现跨平台,采用此种方案的主要是Flutter。
事实上,不管是Hybrid技术方案,还是JavaScript泛原生渲染方案,距离成熟的跨平台技术都存在⼀定的缺陷,⽐如⼩程序WebView)渲染耗时过⻓,⽩屏率会影响转化收益,能实现的功能⾮常受限;再⽐如 React Native 的性能不⾜、问题排除难、维护成本⾼等问题也制约着它的继续发展。
那Flutter作为谷歌推出的跨平台技术框架,又有哪些优势呢?其实,Flutter 在早期并不为大家所熟知,真正爆发是1.0正式版的发布,通过这个版本,开发者可以轻松的构建“UI 漂亮、像素级可控、性能流畅、可媲美原⽣性能”的应用,并且⾃渲染引擎甚⾄具备开发游戏的能⼒。
Flutter 的早期开发者 Eric Seidel 曾经在⼀个访谈中分享过当初为什么开发 Flutter,以及Flutter 的⼀些设计原则和⽅向。Eric Seidel 和 Flutter 早期的⼏位开发⼈员都是来⾃ Chrome 团队,他们在排版和渲染⽅⾯具有⾮常丰富的经验。但⼀直以来,他们都为浏览器的性能⽽感到沮丧,他们希望 Web中的⼀部分能够拥有更加平滑的体验。
为此他们花了⼏周时间做了⼀个实验,在不考虑 Web 的兼容问题后,他们删除了⼤量为了兼容访问的代码和⼀些 Web 开发者不常⽤的功能,然后他们做了⼀个基准测试,得出结论是某些关键性指标的速度居然快了 20 倍。在此基础上,团队投
⼊了⼤量研究和开发,这便是现在的 Flutter 。
不管是设计之初,还是现在的高速迭代,Flutter ⼀直秉承着两个最重要的设计原则,即性能至上和效率至上。
- 性能⾄上:内置布局和渲染引擎,使⽤ Skia 通过 GPU 做光栅化。选择 Dart 语⾔作为开发语⾔,在发布正式版本时使⽤ AOT 编译,不再需要通过解析器解释执⾏或者 JIT。并且⽀持 Tree Shaking ⽆⽤代码删除,减少发布包的体积。
- 效率至上:在开发阶段⽀持代码的 Hot Reload,实现秒级编译更新。重视开发⼯具链,从开发、调试、测试、性能分析都有完善的⼯具。内置 Runtime 实现真正的跨平台,⼀套代码可以同时⽣成 Android/iOS 应⽤,降低开发成本。
正是因为这些⾰命性的优点,Flutter 从一开始就获得了众多开发者和公司的⻘睐,国内就有阿⾥、腾讯、字节跳动、美团等知名⼤⼚早早的使用 Flutter 构建移动⼯程化开发的体系。像阿⾥,最开始只是在闲⻥试⽔,到现在淘宝特价版、盒⻢、优酷、⻜猪等诸多业务都开始尝试使⽤ Flutter了,也都取得了不错的效果。而现今发展迅猛的字节跳动,在引⼊ Flutter 之后,在公司的业务也创造了不少价值。主要体现在这⼏个⽅⾯:
- 其⼀,Flutter 多端⼀致性上表现良好,能做到所⻅即所得,⽆需针对某⼀平台做额外适配⼯作;
- 其⼆,热重载技术使得设计团队和⼯程团队可以⾮常快速地修改和调试 UI,设计师只需要关注⼀个平台实现,UI 验收效率明显提⾼,跨端开发可以提⾼⼯程师的⼈效(有团队初步估算⼈效⼤致提升了 1.8 倍);
- 其三,性能流畅度提升,相较于 H5 版本⾸屏时间有较⼤提升,最后,产品商业化数据都有明显的收益,能直观地看到 Flutter 给公司带来的创收。
Flutter 框架开发现状
此前,Flutter发布了春季更新, Flutter 项目的产品经理蒂姆·斯内斯(Tim Sneath)描述了Flutter的开发现状,并给出了下一阶段的发展计划。
Flutter开发现状和数据
Flutter 的使用率仍在快速增长当中。自它初次发布以来已经过了 16 个月时间,有超过 200 万开发人员用过了 Flutter。虽然行业在 2020 年遇到了前所未有的局面,但在 3 月份 Flutter 依旧获得了 10% 的环比增长,并且每月活跃的开发人员数量有将近 50 万。
这里有一组有趣的统计数据分享给大家:
- 60%的 Flutter 开发人员使用 Windows 开发,27%的开发人员使用 macOS,13%的人员使用 Linux。
- 有 35%的开发人员为初创公司工作,26%的开发者为企业开发人员,19%则是个体经营者,还有 7%的用户为设计机构工作。
- 78%的 Flutter 开发人员使用稳定版渠道,11%的用户使用 beta 版,11%的用户使用 dev 或 master 版。
- Flutter 使用量排名前五的地区分别是印度、中国、美国、欧盟和巴西。
- 谷歌 Play 商店中大约发布了 50,000 个 Flutter 应用,仅在上个月就上传了 10,000 个。
- Flutter 应用中最流行的框架包有 http、shared_preferences、intl、meta、path_provider 和 pedantic。
Flutter企业开发
Flutter 在企业客户中的增长尤其迅速。许多大型公司之所以会选择 Flutter 的关键原因,是因为它能够提供多平台支持,同时提供高水准的产品体验。最近的一个例子是 Nubank,它是亚洲以外最大的数字银行,拥有超过 2000 万客户。Nubank 在对他们的应用程序开发选项进行了详细的调查和分析之后,最终选择了 Flutter,之后他们的前端开发团队就统一在了一个框架上,也因此能够在 iOS 和 Android 平台上同时发布新的软件功能。
企业的一项常见需求是专业组件。谷歌与 SyncFusion 展开了合作,后者的 Essential Studio 产品现在包含了一系列高质量的 Flutter 组件,包括图表、PDF 操作和条形码生成等。在他们的 2020.1 版本中,所有组件均直接支持 Android、iOS 和 Web 平台,并且具有基于 Web 的控件预览。
Flutter版本发布流程
Flutter版本管理
目前,Flutter提供四个渠道版本,分别是beta、dev、master和stable,官方推荐使用stable版本,此版本是Flutter的稳定版本,它们的区别如下:
- master:master分支上的代码是最新的,包含最新的特性,但是master 分支上的代码没有经过测试,可能会出现各种各样的bug。
- dev:dev分支存放的是经过Google内部测试的版本,所以dev版本是通过测试的最新构建。不过,dev版本并不意味着不会有任何bug,因为dev版本的测试只是最基础的测试,一旦发现有严重的阻塞性的bug,这个版本就会被废弃。
- beta:beta版本的更新频率是一个月,每个月初Flutter团队都会将上一个稳定的dev版本选为beta版进行发布,此版本通常是经过线上运行的dev分支,没有新的严重的bug。
- stable:通常stable版本从beta分支中选出,stable版本的更新频率一般为一个季度,每个季度发布一个或多个版本,并且stable版本的发布频率也是不确定的。
我们可以通过在命令行工具中输入flutter channel命令来查看当前Flutter的版本,如下图所示。
如果想要体验Flutter的最新变化,可以将本地分支切换到master,但是开发分支的稳定性通常会很差。切换分支的命令为flutter channel beta 或 flutter channel master命令来进行分支的切换。
新的版本发布流程
在谷歌开发新的 Flutter 稳定版本时,他们对原有的发布模型做出了一些更改,以进一步提高发布的稳定性和可预测性。谷歌原来的发布流程的设计目标是简洁和低维护成本。但随着开发团队的规模不断增大,谷歌遇到了一些会影响到 Flutter 贡献者和开发人员的问题,具体包括:
- 不清楚何时发布什么版本,以及其中包含什么样的代码;
- 缺乏对分支的测试,结果要重复发布修复程序。
对此,从4月份的 Flutter 版本开始,谷歌将转向一个 beta 和稳定版本固定间隔发布的分支模型。现在谷歌将在每月初发布 beta 版,然后精选(cherrypick)出重要的补丁来稳定该版本。大约每季度一次,当前的 beta 分支将升级到稳定版本。如有必要,谷歌将继续修复此版本。现在谷歌的基础架构支持针对分支的测试,这样就能验证那些精选补丁,并根据严重性的水平接受某些请求。
谷歌还借此机会调整了 Flutter 和 Dart 的发行流程和渠道。Dart 添加了一个 beta 通道,并且之后它们发布的版本将被同步(例如,Flutter beta 版本将包含一个 Dart beta 版本)。
如果用户已经在基于稳定通道发布 Flutter 应用,谷歌建议用户在 beta 候选版本中测试应用,并报告所遇到的任何问题,帮助提升稳定版本的质量。你还可以根据 Flutter Wiki 上新的 Flutter 精选流程的指引,在稳定通道上升级回归或阻止 Bug。
这一新流程将为 Flutter 的发行版带来更高的质量和更好的可预测性,并为将稳定补丁发布到稳定的通道提供更简便的方法。
新的更新流程总结如下:
非稳定发行版将在版本字符串中以.pre 注释,以表示其预发布状态。给定一个 x.y.z-n.m.pre 的版本字符串,每当从 master 生成一个新构建时,dev 通道构建将增加 n,例如:
- 1.18.0–1.0.pre:master 版本移至 1.18 之后的第一个 dev 构建。
- 1.18.0–2.0.pre:从 master 的最新发布点出发的下一个 dev 构建。
如上所述,谷歌将从 dev 版本发布点构建 beta 版本。在某个发行版上精选补丁时,m 版本号将会增加。例如,master 的第 15 个 dev 构建作为 beta 的 1.18 版本,则版本控制如下所示:
- 1.18.0–15.0.pre:初始 beta 候选版(与 dev 发行版相同)。
- 1.18.0–15.1.pre:在(现在的)beta 分支上的后续构建,带有一些精选补丁。
- 1.18.0–15.2.pre:第二个后续构建。
稳定版的版本号将为 x.y.0。如果有必要,后续的修补程序版本将增加补丁号:x.y.1,x.y.2,以此类推。
- 1.18.0–15.4.pre:分支上的最新 beta 构建。
- 1.18.0:稳定版本,与 1.18.0–15.4-pre 相同。
- 1.18.1:潜在的 1.18.0 修补程序。
除此之外,如果你正在寻找 Flutter 的学习资源,谷歌免费提供了 Flutter 的 入门培训课程,可以帮助新手快速的开始 Flutter 的旅程。
以上是 国内Flutter开发现状 的全部内容, 来源链接: utcz.com/a/18466.html