乐趣区

关于flutter:Flutter-Engage-China-开发者常见问题解答-下篇

再次感激大家对 Flutter Engage China 流动 的关注和积极参与!咱们在流动前后收到了很多来自开发者的反馈和问题,Flutter 团队和演讲嘉宾在直播 Q&A 环节中也针对局部问题在第一工夫给出回复。当初咱们将一些开发者关怀的问题和回复整理出来分享给大家,心愿对您有所帮忙。因为问题数量较多,咱们分为高低两期公布,上期的内容曾经公布,欢送大家 返回回顾。您也能够观看 Flutter Engage China 视频回顾精彩内容:

➡️点击这里查看直播回顾视频⬅️

  • Bilibili 视频合集链接 https://www.bilibili.com/medialist/play/ml1214246458/BV1hh411D7mV

为什么 Flutter SDK 集成的内容这么少,写个简略的控件都须要依赖第三方插件,不能多扩大一下控件性能吗?

回答者: 杨天航 (Chris),Google Flutter 团队工程师

在一开始决定哪些内容应该集成到 SDK 里的时候,咱们次要思考这么三个因素:

  • 升高二进制文件尺寸
  • 心愿框架里的 API 在不同平台上比拟对立 。所以如果咱们在框架或引擎里退出一些控件的性能的话,会让咱们无奈去对立 API。
  • 让 Flutter 框架十分模块化 ,两头有很多模块,很多层级,这样咱们能够很容易地进行替换。如果咱们把视频播放器控件建设在 Flutter 引擎和框架里,那就很难防止大部分的 Flutter 利用只能抉择咱们提供的视频播放器 API 的场面。这样其实很不不便,尤其对于那些有不同需要的利用。如果是以当初插件的模式提供视频播放器的话,大家都能够找到适合的解决方案。不同的团队也能够建设本人的插件,这无疑会让大家有更多抉择的余地。

Flutter 包体积如何缩减?

回答者: 董韬,Google Flutter 用户体验钻研负责人

咱们始终在针对这个问题做优化工作。包的精简次要包含两个方面的工作: 第一个方面是 Flutter 团队为寰球所有用户做的全局优化。第二个方面是每个 App 团队在本人的 App 外部做的优化。

从第一个方面来讲,咱们去年对大的编译过程做了很多优化,次要是在 iOS 端。iOS 端产物的体积曾经有了比较显著的放大。目前来看,想要进一步放大包产物的话,须要更多的由开发者依据本人 App 的理论状况做一些取舍,以及对 Flutter 引擎做肯定的定制。

咱们最近也推出了一款工具,在 Dart DevTools 外面,叫做 Code Size Analysis,这个工具能够帮大家可视化包里具体有哪些内容,每个内容占用了多少空间。有的时候您可能会发现,有一些资源或者有一些依赖的库占用了过多的空间。这个工具也会帮您解析 Flutter 引擎外面具体的产物是什么,如果您有打算去对 Flutter 引擎进行定制的话,这些都会是很好的参考数据。

回答者: 袁辉辉,字节跳动 Flutter 技术负责人

我简略从 App 团队的角度来做一些补充。App 团队想放大包体积的话,有三个能够做的优化。一个是压缩,次要是咱们在代码端和数据端,能够对数据做一些压缩。二是裁剪,您能够看看哪些模块是不应用的,比如说您是国内应用的 App,那就并不需要国际化的一些功能模块,就能够裁剪掉。三是零碎级的优化,比如说大的编译由 O3 变 Oz,或者是做指令集头部的一些精简,把 code source map 这样的货色去掉,以及做一些混同,到了线上之后再通过后盾平台还原回来,能应用的伎俩其实很多的。

咱们接下来会加大对外的技术输入,后续咱们会把这些技巧再梳理一下分享给大家。

相似微博那种大量音频、视频,以及文本和图片混排导致的性能问题该怎么解决?

回答者: 刘森森,阿里巴巴 UC 客户端团队

这个问题其实能够了解为在这种简单卡片的场景下,在列表做惯性滚动的时候呈现的一些性能问题。这个问题十分典型,实际上在应用层有很多优化伎俩能够去做。

首先咱们能够应用 Flutter 提供的性能剖析工具来定位问题,去发现是否在写法下面存在着一些能够优化的中央。比方在列表滚动的时候,是否存在 widget 构建的次数过多,或者构建的层级过深的问题,导致 UI 线程呈现卡顿。咱们也能够应用 Flutter 提供的 RepaintBoundary,来缩小重绘的范畴。并且查看是否应用到了 ClipPath 或者 BackdropFilter 这种可能会对 Raster 线程造成肯定影响的操作,是否能够尽量去防止。

在优化完写法后,能够去评估应用 SurfaceView 作为 FlutterView 渲染的实现。SurfaceView 从原理上来讲比 TextureView 的性能更好,因为它有独立的渲染管线。从理论测试的成果来看,SurfaceView 的帧率均匀有 2~4 帧的晋升。它的问题可能存在于混合开发的场景,因为它跟 AndroidView 不兼容,会导致黑屏等兼容性问题。我的倡议是,如果是开发一个残缺的 Flutter App 的话,优先选用 SurfaceView;如果做混合栈开发的话,须要评估 SurfaceView 是否存在导致兼容性问题的场景,而后尽量去应用 SurfaceView。

如果前两步都没有发现问题的话,能够应用我分享的分帧渲染的思路,也能够缩小 UI 和 Raster 线程的绘制耗时。

https://www.bilibili.com/vide…

回到引擎层面上,UC 这边做的一些优化也会以 PR 的模式回馈到社区,大家能够关注咱们的停顿。

教育培训畛域的利用适宜应用 Flutter 吗?

回答者: 袁辉辉,字节跳动 Flutter 技术负责人

教育这一块的话,咱们在字节外部其实用 Flutter 比拟多的就是咱们的教育领域产品。我有理解到,很多公司会针对一款教育产品,依照课程进行拆分,比方数学、英语、思维,都会拆分出一个个独立的 App,这个开发的工作量是十分大的。在刚进入一个新的行业时,人员招聘可能一下子跟不上来,这个时候其实咱们会很在乎一个技术能不能让研发效率实现疾速晋升,这时 Flutter 就是一个比拟好的抉择。

昨天我还跟咱们公司外的教育公司聊到 Flutter。他们当初有一款大的 App,想要拆成很多个教育子方向的 App,可能会裂变成 3 个、5 个甚至 10 个,然而他们团队可能 Android 和 iOS 端加在一起也只有几个开发小伙伴。聊下来的后果就是,Flutter 是一个很好的切入形式。我感觉不光是教育行业,其实对于一些新 (畛域) 的 App,如果您比拟重视研发效率,用 Flutter 都是一个不错的抉择。

高提早渲染管线如何分帧,是否应用 Isolate 分线程?

回答者: 刘森森,阿里巴巴 UC 客户端团队

高提早渲染管线,其实它的分帧还是以 16 毫秒为周期输入的,就是一个 Vsync 周期,这一点是没有扭转的。实现起来的话,次要是把本来必须在一个 Vsync 周期实现的工作增大到了两个 Vsync 周期,因为 UI 线程和 Raster 线程是并行的,从而增大了输入的吞吐量,Raster 线程始终是每一个 Vsync 周期输入一帧。大家能够联合 Android 的 DoubleBuffer 去了解,会更容易一些。在线程方面,咱们没有新建,而是在本来的 UI 线程和 Raster 线程下来操作的。这些改变只是在引擎层,下层不必去做什么。

请问 Flutter 在汽车零碎上做了哪些工作?丰田采纳 Flutter 开发的车机系统会及时开源吗?

回答者: 樊舟颖 (Zoey),Google Flutter 产品经理

上次在 Flutter Engage 流动 上,咱们邀请丰田来解说了一些他们当初 Flutter 的部署布局。丰田当初还没有颁布具体的打算,以及是否开源。如果大家有这个需要的话,咱们会和丰田聊一聊,向他们提出这方面的倡议。但咱们不是丰田,不能代表他们来做出决定,如果他们后续有相干的开源打算的话,咱们会和大家分享。

. . .

以上就是 Flutter Engage China 开发者常见问题解答 (下篇) 的内容,大家也能够随时回顾之前公布的 上篇内容。如果您有任何疑难或者倡议,欢送大家在评论区或 GitHub 踊跃分享您的反馈与想法。

退出移动版