Flutter调研报告
一、 Flutter简介
Flutter是google公司开发的一款基于Dart语言的全新一代跨平台,开源的UI框架。它最早是在2015年Dart开发者峰会上与大家见面,在此之后2017年5月发布了第一个Aplpha 版本,并于2018年12月初发布了1.0稳定版。
Google发布这个框架的初衷,就是结合自身多年来在各个方向,包含但不止于前端,移动端的经验,以及友商或失败或成功的经验,结合最新的一些框架理念,为下一代大前端统一UI框架发出的又一次冲击。为此铺路,Google也已经宣布将在Fuchsia 操作系统中扶正Flutter成为其官方开发框架。而Fuchsia 操作系统本身相比android,可以做到更轻量,对硬件和内存要求更低,本身定位是Google面对下一代物联网的主打操作系统。因此可见Google对其Flutter框架性能的信心。
二、 前车之鉴
在此之前,市面上已经出现了以ReactNative,weex为代表的跨平台方案。但是就目前来说,这两套方案都远没有达到人们的预期,甚至weex已经走向了生命周期的尽头。那么Flutter和他的前者比到底有哪些不同呢?
从大了讲,RN和weex以及其他的几乎所有flutter之前出现的跨平台方案,都无外乎两种设计思路。
1. H5时代,
这种类型的跨平台方案,其实就是将一个web网页尽可能的模仿移动端原生的页面效果,依托android和iOS各自平台的WebView网页容器控件,来打开网页,从而实现跨平台的效果。这种方案的缺点就很明显,它在性能上是远远不能和原生UI框架相提并论,而且观感效果差强人意,交互上也受很大限制。
2. 以RN为代表的时代,
为了解决H5时代性能上的巨大差距,Facebook于15年开源了这套UI框架,包括weex在内,他们解决性能问题的法宝,按通俗了讲就是代码映射。以RN为例。
RN本身使用起来,其实和普通的前端框架并无二致,前端开发者的入门成本很低,开发者可以大部分使用JS代码就构建起一个跨平台APP。RN 会把应用的JS代码(包括依赖的framework)编译成一个js文件(一般命名为index.android.bundle), RN的整体框架目标就是为了解释运行这个js 脚本文件,如果是js 扩展的API, 则直接通过bridge调用native方法; 如果是UI界面, 则映射到virtual DOM这个虚拟的JS数据结构中,通过bridge 传递到native , 然后根据数据属性设置各个对应的真实native的View。 bridge是一种JS 和 JAVA代码通信的机制, 用bridge函数传入对方module 和 method即可得到异步回