再次感谢你们对 Flutter Engage China 活动 的关注和积极参与!咱们在活动先后收到了不少来自开发者的反馈和问题,Flutter 团队和演讲嘉宾在直播 Q&A 环节中也针对部分问题在第一时间给出回复。如今咱们将一些开发者关心的问题和回复整理出来分享给你们,但愿对您有所帮助。因为问题数量较多,咱们分为上下两期发布,上期的内容已经发布,欢迎你们 前往回顾。您也能够观看 Flutter Engage China 视频回顾精彩内容:html
回答者: 杨天航 (Chris),Google Flutter 团队工程师github
在一开始决定哪些内容应该集成到 SDK 里的时候,咱们主要考虑这么三个因素:api
回答者: 董韬,Google Flutter 用户体验研究负责人app
咱们一直在针对这个问题作优化工做。包的精简主要包括两个方面的工做: 第一个方面是 Flutter 团队为全球全部用户作的全局优化。第二个方面是每一个 App 团队在本身的 App 内部作的优化。框架
从第一个方面来说,咱们去年对大的编译过程作了不少优化,主要是在 iOS 端。iOS 端产物的体积已经有了比较显著的缩小。目前来看,想要进一步缩小包产物的话,须要更多的由开发者根据本身 App 的实际状况作一些取舍,以及对 Flutter 引擎作必定的定制。ide
咱们最近也推出了一款工具,在 Dart DevTools 里面,叫作 Code Size Analysis,这个工具能够帮你们可视化包里具体有哪些内容,每一个内容占用了多少空间。有的时候您可能会发现,有一些资源或者有一些依赖的库占用了过多的空间。这个工具也会帮您解析 Flutter 引擎里面具体的产物是什么,若是您有计划去对 Flutter 引擎进行定制的话,这些都会是很好的参考数据。模块化
回答者: 袁辉辉,字节跳动 Flutter 技术负责人工具
我简单从 App 团队的角度来作一些补充。App 团队想缩小包体积的话,有三个能够作的优化。一个是压缩,主要是咱们在代码端和数据端,能够对数据作一些压缩。二是裁剪,您能够看看哪些模块是不使用的,好比说您是国内使用的 App,那就并不须要国际化的一些功能模块,就能够裁剪掉。三是系统级的优化,好比说大的编译由 O3 变 Oz,或者是作指令集头部的一些精简,把 code source map 这样的东西去掉,以及作一些混淆,到了线上以后再经过后台平台还原回来,能使用的手段其实不少的。post
咱们接下来会加大对外的技术输出,后续咱们会把这些技巧再梳理一下分享给你们。
回答者: 刘森森,阿里巴巴 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 比较多的就是咱们的教育领域产品。我有了解到,不少公司会针对一款教育产品,按照课程进行拆分,好比数学、英语、思惟,都会拆分出一个个独立的 App,这个开发的工做量是很是大的。在刚进入一个新的行业时,人员招聘可能一会儿跟不上来,这个时候其实咱们会很在意一个技术能不能让研发效率实现快速提高,这时 Flutter 就是一个比较好的选择。
昨天我还跟咱们公司外的教育公司聊到 Flutter。他们如今有一款大的 App,想要拆成不少个教育子方向的 App,可能会裂变成 3 个、5 个甚至 10 个,可是他们团队可能 Android 和 iOS 端加在一块儿也只有几个开发小伙伴。聊下来的结果就是,Flutter 是一个很好的切入方式。我以为不光是教育行业,其实对于一些新 (领域) 的 App,若是您比较注重研发效率,用 Flutter 都是一个不错的选择。
回答者: 刘森森,阿里巴巴 UC 客户端团队
高延迟渲染管线,其实它的分帧仍是以 16 毫秒为周期输出的,就是一个 Vsync 周期,这一点是没有改变的。实现起来的话,主要是把本来必须在一个 Vsync 周期完成的任务增大到了两个 Vsync 周期,因为 UI 线程和 Raster 线程是并行的,从而增大了输出的吞吐量,Raster 线程始终是每个 Vsync 周期输出一帧。你们能够结合 Android 的 DoubleBuffer 去理解,会更容易一些。在线程方面,咱们没有新建,而是在本来的 UI 线程和 Raster 线程上去操做的。这些改动只是在引擎层,上层不用去作什么。
回答者: 樊舟颖 (Zoey),Google Flutter 产品经理
上次在 Flutter Engage 活动 上,咱们邀请丰田来说解了一些他们如今 Flutter 的部署规划。丰田如今尚未公布具体的计划,以及是否开源。若是你们有这个需求的话,咱们会和丰田聊一聊,向他们提出这方面的建议。但咱们不是丰田,不能表明他们来作出决定,若是他们后续有相关的开源计划的话,咱们会和你们分享。
. . .
以上就是 Flutter Engage China 开发者常见问题解答 (下篇) 的内容,你们也能够随时回顾以前发布的 上篇内容。若是您有任何疑问或者建议,欢迎你们在评论区或 GitHub 积极分享您的反馈与想法。