所在的位置: swift >> swift发展 >> Flutter25更新详解

Flutter25更新详解

SEO百度优化求职QQ群 http://pf.39.net/bdfyy/bdfjc/180627/6359009.html

Flutter2.5正式版已于上周正式发布!这是一次重要的版本更新,也是Flutter发布历史上各项统计数据排名第二的版本。我们关闭了个Issue,合并了个PR,它们分别来自个贡献者和个审核者。回顾去年--我们收到来自个贡献者提交的个PR,其中有个被合并。在详述本次更新的内容之前,我们想强调,Flutter的首要工作始终是高质量交付开发者们所需要功能。

Flutter2.5带来了一些重要的性能和工具改进,以帮助开发者们追踪应用中的性能问题。同时,加入了一些新的功能,包括对Android的全屏支持、对MaterialYou(也称v3)的更多支持、对文本编辑的更新以支持切换键盘快捷键、在WidgetInspector中查看widget详情、在VisualStudioCode项目中添加依赖关系的新支持、从IntelliJ/AndroidStudio的测试运行中获得测试覆盖率信息的新支持,以及一个更贴近Flutter应用在真实的使用场景下的应用模板等。这个版本充满了令人兴奋的新更新,让我们开始介绍吧!

该版本进行了一些性能上的改进:首先是一项用于从离线训练运行中连接Metal着色器预编译的PR(#),这将最坏情况下的光栅化时间减少了2/3(如我们的基准测试所示),将第99百分位的帧时间减少了一半。我们在减少iOS卡顿方面取得了持续性的进展,这也是在这条道路上迈出的另一步。然而,着色器预热只是卡顿的一个来源。在该版本以前,处理来自网络、文件系统、插件或其他isolate的异步事件可能导致动画中断,这是另一个卡顿的来源。在该版本中我们对UIIsolate的事件循环的调度策略(#)进行了改进,现在帧处理优先于其他异步事件的处理,在我们的测试中,其导致的卡顿已经被消除。

另一个原因是垃圾回收(GC)会暂停UI线程来回收内存。在该版本以前,一些图像的内存只能在DartVM执行GC时以较慢的速度进行回收。在早期版本中,常用的做法是Flutter引擎会向DartVM提示图像内存可以通过GC回收,理论上可以让内存回收更为及时。不幸的是,在实践中这造成了过多的回收,而且内存有时仍然不能被快速回收,导致无法避免在内存有限的设备上出现低内存的情况。在现在的版本中,未使用的图像的内存会尽可能快速地进行回收(#、#、#),这大大减少了GC的次数。

举个例子,在我们的一个测试中,播放了一个20秒的GIF动画,GC的次数从需要次下降到只需4次。更少的主要GC,意味着更少的涉及图像出现和消失的动画卡顿,更少的CPU和电量消耗。

Flutter2.5的另一项性能改进是优化了iOS上Dart和Objective-C/Swift、Android上Dart和Java/Kotlin之间相互通信的延迟。作为调整消息通道的一部分,我们从消息编解码器中移除了不必要的拷贝,在不同内容的大小和设备上减少了高达50%的延迟(详见#、#)。

更多详情,请你参阅AaronClarke的文章:提高Flutter中的平台通道性能。

如果你要构建iOS应用,我们还有 一项性能更新:在该版本中,使用AppleSiliconM1Mac构建的Flutter应用可以直接在ARM架构的iOS模拟器(#pull/)上运行。这意味着无需使用Rosetta对Intelx86_64指令和ARM进行转换,这提升了iOS应用测试的性能,并规避了一些微妙的Rosetta问题(#、#)。这是Flutter在全面支持AppleSilicon的路程上迈出的又一步,敬请继续


转载请注明:http://www.aierlanlan.com/tzrz/2560.html