接上篇:https://developer.aliyun.com/article/1225939?spm=a2c6h.13148508.setting.27.595d4f0eudDbz0
四、 Flutter新渲染引擎impeller尝鲜
接着上面的问题,Flutter有一个early-onset jank的公开问题(问题详解可以参见引用【1】)。Flutter页面的抖动问题跟这个问题有着一定的关联。本质上impeller是Skia的一个替代方案。官方在Flutter3.0的版本中首次公开了Impeller的预览版本。同时在Flutter3.3版本中进行了大量完善。目前可以通过如下方式开启:
• flutter run添加--enable-impeller
• Native工程配置
在IOS工程的Info.plist文件中添加如下配置:
FLTEnableImpeller
Android工程,在AndroidManifest.xml添加如下配置:
android:name="io.flutter.embedding.android.EnableImpeller"
android:value="true" />
那impeller效果如何呢?从我们初步的测试来看,有如下初步结论:注意目前impeller iOS的成熟度相比Android要高很多。我们只测试了iOS的场景:
• 从官方Gallery场景来看,优化效果显著,impeller的debug包就有了媲美之前release包的效果。Flutter的细碎抖动问题,在官方Gallery场景上基本解决。滚动流畅性有显著提升。
• 由于官方Gallery比较简单,从闲鱼的实际benchmark来看,impeller目前在复杂场景下的性能未超过skia的实现。【测试版本Flutter3.3.8手机iPhone13 Pro】主要原因是impeller目前阶段比较早,很多功能还有待完善,测试过程中也出现了大量渲染错误的问题。impeller距离生产中使用还需时日。
impeller是Flutter根本上解决卡顿问题的重要尝试,虽然目前状态下还有很多的不完善,但是可以明显感受到impeller带来的显著变化,未来可期。
五、 Flutter NullSafty有用么?
Flutter从2.0版本开始引入Dart语言的NullSafty特性,并且在Flutter2.2版本中默认开启Dart3.0版本中已经明确不再支持非NullSafty代码。引入NullSafty特性能带来的明显收益:
a) 在编译期对变量的空安全做强保护。并且IDE会在代码静态扫描的过程中,直接给出空安全相关的提示。这无疑大幅提升了编码效率和代码质量。
b) Dart编译器能针对支持NullSafty的代码进行更多优化以生成体积更小,性能更佳的程序。
c) 代码表达更加精简。
非NullSafty
NullSafty
ok如果你想将自己的现有的代码迁移到NullSafty 。可以有多种方案可用:
• 将Flutter项目中的dart Sdk版本改成>=2.12。整个工程即可开启NullSafty。
• 如果整体开启工作量太大,可以改成单个文件开启。只需要在dart文件的最开始(一定要最顶上写)添加如下注释即可:
接下篇:https://developer.aliyun.com/article/1225936?groupCode=idlefish