You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
9.7 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 开篇词 | 为什么每一位大前端从业者都应该学习Flutter
你好我是陈航之前在美团外卖担任商家业务大前端团队技术负责人。在接下来三个月的时间里我将和你一起学习Flutter。
当下是移动互联网的时代也是大前端技术紧密整合的时代。而移动系统与终端设备的碎片化让我们一直头痛于在不同平台上开发和维护同一个产品的成本问题使用原生方式来开发App不仅要求分别针对iOS和Android平台使用不同的语言实现同样的产品功能还要对不同的终端设备和不同的操作系统进行功能适配并承担由此带来的测试维护升级工作。
这对中小型团队而言无疑是非常大的负担,也无形中拖慢了追求“小步快跑”,以快速应对市场变化的互联网产品交付节奏。
为解决这一问题,各类打着“一套代码,多端运行”口号的跨平台开发方案,如雨后春笋般涌现,**React Native就是其中的典型代表**。
React Native希望开发者能够在性能、展示、交互能力和迭代交付效率之间做到平衡。它在Web容器方案的基础上优化了加载、解析和渲染这三大过程以相对简单的方式支持了构建移动端页面必要的Web标准保证了便捷的前端开发体验并且在保留基本渲染能力的基础上用原生自带的UI组件实现代替了核心的渲染引擎从而保证了良好的渲染性能。
但是由于React Native的技术方案所限使用原生控件承载界面渲染在牺牲了部分Web标准灵活性的同时固然解决了不少性能问题但也引入了新的问题除开通过JavaScript虚拟机进行原生接口的调用而带来的通信低效不谈由于框架本身不负责渲染而是由原生代理因此我们还需要面对大量平台相关的逻辑。
而随着系统版本和API的变化我们还需要处理不同平台的原生控件渲染能力上的差异修复各类怪异的Bug甚至还需要在原生系统上打各类补丁。
这都使React Native的跨平台特性被大打折扣要用好React Native除了掌握这个框架外开发者还必须同时熟悉iOS和Android系统。这无疑给开发者提出了更多挑战也是很多开发者们对React Native又爱又恨的原因。在这其中也有一些团队决定放弃React Native回归原生开发Airbnb就是一个例子。
备注2018年Airbnb团队在Medium上发布的一系列文章[React Native at Airbnb](https://medium.com/airbnb-engineering/react-native-at-airbnb-f95aa460be1c)、[React Native at Airbnb: The Technology](https://medium.com/airbnb-engineering/react-native-at-airbnb-the-technology-dafd0b43838)、[Building a Cross-Platform Mobile Team](https://medium.com/airbnb-engineering/building-a-cross-platform-mobile-team-3e1837b40a88)、[Sunsetting React Native](https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a)、[Whats Next for Mobile at Airbnb](https://medium.com/airbnb-engineering/whats-next-for-mobile-at-airbnb-5e71618576ab))详细描述了这个过程。
**而我们本次课程的主角Flutter则完全不同于React Native。**
它开辟了全新的思路提供了一整套从底层渲染逻辑到上层开发语言的完整解决方案视图渲染完全闭环在其框架内部不依赖于底层操作系统提供的任何组件从根本上保证了视图渲染在Android和iOS上的高度一致性Flutter的开发语言Dart是Google专门为前端开发量身打造的专属语言借助于先进的工具链和编译器成为了少数同时支持JIT和AOT的语言之一开发期调试效率高发布期运行速度快、执行性能好在代码执行效率上可以媲美原生App。而这与React Native所用的只能解释执行的JavaScript又拉开了性能差距。
正是因为这些革命性的特点Flutter在正式版发布半年多的时间里在GitHub上的Star就已经超过了68,000与已经发布4年多的、拥有78,000 Star的同行业领头羊React Native的差距非常小。同时阿里闲鱼、今日头条等知名商用案例的加持更使得Flutter的热度不断攀升。
**现在看来在Google的强力带动下Flutter极有可能成为跨平台开发领域的终极解决方案。**在过去的大半年时间里我曾面试了20多位初、中、高级候选人包括前端、Android、iOS的开发者。当问到最近想学习什么新技术时超过80%的候选人告诉我他会学习或正在学习Flutter。
不过坦白讲相比其他跨平台技术Flutter的学习成本相对较高。我听过很多前端开发者反馈Flutter从语言到开发框架都是全新的技术栈的积累也要从头开始学不动了。
**学习成本高,这也是目前大多数开发者犹豫是否要跟进这个框架的最重要原因。对此,我感同身受。**
但其实大前端各个方向的工作有很多相似、相通之处。面对业务侧日益增多的需求作为大前端团队的负责人我曾在不同时期带领团队分别探索并大规模落地了以React Native和Flutter为代表的跨平台方案也是美团最早落地Flutter线上大规模应用的发起者和推动者之一。
在探索并大规模落地Flutter的过程中我阅读过大量关于Flutter的教程和技术博客但我发现很多文章的学习门槛都比较高而且过于重视应用层API各个参数的介绍或实现细节导致很多从其他平台转来的开发者无从下手只能依葫芦画瓢却不知道为什么要“画瓢”无法与自身的经验串联进而形成知识体系。这无疑又增加了学习门槛加长了学习周期。
那么,**Flutter到底该怎么学真的要从头开始么**
虽然Flutter是全新的跨平台技术但其背后的框架原理和底层设计思想无论是底层渲染机制与事件处理方式还是组件化解耦思路亦或是工程化整体方法等与原生Android/iOS开发并没有本质区别甚至还从React Native那里吸收了不少优秀的设计理念。就连Flutter所采用的Dart语言关于信息表达和处理的方式也有诸多其他优秀编程语言的影子。
因此从本质上看Flutter并没有开创新的概念。这也就意味着如果我们在学习Flutter时能够深入进去搞懂它的原理、设计思路和通用理念并与过往的开发经验相结合建立起属于自己的知识体系抽象层次而不是仅停留在应用层API的使用上就摆脱了经验与平台的强绑定。
这样的话,即使未来老框架不断更新,或者出现新的解决方案,我们仍旧可以立于不败之地。
那么Flutter框架底层有哪些关键技术它们是如何高效运转以支撑起可以媲美原生应用的跨平台方案的Flutter应用开发的最佳实践是怎样的企业需要什么样的终端技术人才终端技术未来有哪些发展方向
这些问题正是我要通过这个课程为你解答的。在这个课程里我不仅会帮助你快速上手能够使用Flutter开发一款企业级App更希望帮助你将其与过往的开发经验串联起来以建立起自己的知识体系同时希望你能透过现象明白Flutter框架的用法并看到其背后的原理和设计理念。
为了帮助你领悟到Flutter的核心思想和关键技术而不是陷入组件的API细节难以自拔我会在不影响学习、理解的情况下省去一些不影响核心功能的代码和参数讲解着重为你剖析框架的核心知识点和背后原理并与你分享一些常见问题的解决思路。
整体来说,专栏主要包括以下五大部分内容:
* **Flutter开发起步模块。**我会从跨平台方案发展历史出发与你介绍Flutter的诞生背景、基本原理并带你体验一下Flutter代码是如何在原生系统上运行的。
* **Dart基础模块。**我会从Dart与其他编程语言的设计思想对比出发与你讲述Dart设计的关键思路以及独有特性并通过一个综合案例带你去实践一下。
* **Flutter基础模块。**我将通过Flutter与原生系统对应概念对比与你讲述Flutter独有的概念和框架设计思路。学完这个模块你就可以开发出一个简单的App了。
* **Flutter进阶模块。**我会与你讲述Flutter开发中的一些疑难问题、高级特性及其背后原理帮助你在遇到问题时化被动为主动。
* **Flutter综合应用模块。**我将和你聊聊在企业级应用迭代的生命周期中如何从效率和质量这两个维度出发构建自己的Flutter开发体系。
最后我希望通过这个课程能够帮助你快速上手Flutter开发应用掌握其精髓并引导你建立起属于自己的终端知识体系。
现在Flutter正处于快速发展中社区也非常活跃。站在未来看未来尽管Flutter全平台制霸的目标已经非常清晰但为期三个月的专栏分享未必能穷尽Flutter未来可能的技术发展方向。接下来我会持续关注Flutter包括移动端之外的最新变化持续更新这个专栏第一时间与你分享Flutter的那些事儿。
好了今天的内容就到这里了。如果可以的话还请你在留言区中做个自我介绍和我聊聊你目前的工作、学习情况以及你在学习或者使用Flutter时遇到的问题这样我们可以彼此了解也方便我在后面针对性地给你讲解。
加油,让我们突破自己的瓶颈,保持学习、保持冷静、保持成长。