美文网首页谷歌-Flutter
《Flutter原理及美团技术团队实践 》学习总结

《Flutter原理及美团技术团队实践 》学习总结

作者: Fat_L | 来源:发表于2018-08-18 15:28 被阅读170次

    https://github.com/flutter/flutter
    Flutter是Google开发的一套全新的跨平台。
    2017年5月发布第一个版本。
    2018年6月发布了第一个Release preview版本。

    背景

    在Flutter诞生之前,已经有许多跨平台UI框架的方案。
    (1) 基于WebView的Cordova、AppCan

    优点:
    可以完全继承现代Web开发的所有成果(丰富得多的控件库、满足各种需求的页面框架、完全的动态化、自动化测试工具等等),当然也包括Web开发人员,不需要太多的学习和迁移成本就可以开发一个App。

    缺点:
    WebView的渲染效率和JavaScript执行性能太差。再加上Android各个系统版本和设备厂商的定制,很难保证所在所有设备上都能提供一致的体验。

    (2) 基于HTML+JavaScript渲染成原生控件的React Native、Weex

    优点:
    以React Native为代表的一类框架将最终渲染工作交还给了系统,虽然同样使用类HTML+JS的UI构建逻辑,但是最终会生成对应的自定义原生控件,以充分利用原生控件相对于WebView的较高的绘制效率。

    缺点:
    与此同时这种策略也将框架本身和App开发者绑在了系统的控件系统上,不仅框架本身需要处理大量平台相关的逻辑,随着系统版本变化和API的变化,开发者可能也需要处理不同平台的差异,甚至有些特性只能在部分平台上实现,这样框架的跨平台特性就会大打折扣。

    Flutter原理

    Flutter则开辟了一种全新的思路,从头到尾重写一套跨平台的UI框架,包括UI控件、渲染逻辑甚至开发语言。

    渲染引擎依靠跨平台的Skia图形库来实现,依赖系统的只有图形绘制相关的接口,可以在最大程度上保证不同平台、不同设备的体验一致性,逻辑处理使用支持AOT的Dart语言,执行效率也比JavaScript高得多。

    Flutter同时支持Windows、Linux和macOS操作系统作为开发环境,并且在Android Studio和VS Code两个IDE上都提供了全功能的支持。Flutter所使用的Dart语言同时支持AOT和JIT运行方式,JIT模式下还有一个备受欢迎的开发利器“热刷新”(Hot Reload),即在Android Studio中编辑Dart代码后,只需要点击保存或者“Hot Reload”按钮,就可以立即更新到正在运行的设备上,不需要重新编译App,甚至不需要重启App,立即就可以看到更新后的样式。

    Dart语言

    Dart是一种强类型、跨平台的客户端开发语言。具有专门为客户端优化、高生产力、快速高效、可移植(兼容ARM/x86)、易学的OO编程风格和原生支持响应式编程(Stream & Future)等优秀特性。Dart主要由Google负责开发和维护,在2011年10启动项目,2017年9月发布第一个2.0-dev版本。

    Dart本身提供了三种运行方式:

    1. 使用Dart2js编译成JavaScript代码,运行在常规浏览器中(Dart Web)。

    2. 使用DartVM直接在命令行中运行Dart代码(DartVM)。

    3. AOT方式编译成机器码,例如Flutter App框架(Flutter)。

    Flutter在筛选了20多种语言后,最终选择Dart作为开发语言主要有几个原因:

    1. 健全的类型系统,同时支持静态类型检查和运行时类型检查。
    2. 代码体积优化(Tree Shaking),编译时只保留运行时需要调用的代码(不允许反射这样的隐式引用),所以庞大的Widgets库不会造成发布体积过大。
    3. 丰富的底层库,Dart自身提供了非常多的库。
    4. 多生代无锁垃圾回收器,专门为UI框架中常见的大量Widgets对象创建和销毁优化。
    5. 跨平台,iOS和Android共用一套代码。
    6. JIT & AOT运行模式,支持开发时的快速迭代和正式发布后最大程度发挥硬件性能。
    具体使用

    总结

    1、但是在高性能和跨平台方面Flutter在众多UI框架中还是有很大优势的。

    2、开发Flutter应用只能使用Dart语言。

    3、Flutter目前仍处于早期阶段,许多常用的复杂控件还需要自己实现。

    4、代码简介直观,生成APP体积小

    5、不适合追求动态化部署的场景。Flutter在Android上已经可以实现动态化部署,但是由于Apple的限制,在iOS上实现动态化部署非常困难,Flutter团队也正在和Apple积极沟通。

    Flutter的原理使得它有高性能的潜力和发展空间,期待它的后续更新。

    相关文章

      网友评论

      • AWeiLoveAndroid:Flutter Flutter
        学的多 会的多
        跨平台就要就要Flutter
        每时每刻都用Flutter
        Flutter...

      本文标题:《Flutter原理及美团技术团队实践 》学习总结

      本文链接:https://www.haomeiwen.com/subject/pfsfiftx.html