ReactNative中所有的标签都不是真实控件,JS代码中的DOM布局会被解析成原生平台的控件,如标签对应ViewGroup/UIView,对应ScrollView/UIScrollView,对应ImageView/UIImageView,最终堆叠出一系列原生控件进行渲染。这种策略同时也将框架本身绑在了系统的控件上,抛开框架本身需要处理大量平台相关的逻辑,随着系统版本和API的变化,开发者也要不断的处理不同平台的差异。这种设计思想在后来阿里开源的Weex框架中也有所体现,但是Weex使用了V8引擎和Vue的设计理念。
3 Unity、Qt for mobile
热重载快速开发。Flutter选用了Google于2011年推出的Dart作为其开发语言。Dart既支持是AOT(Ahead Of Time)编译,也支持是JIT(Just In Time)编译。AOT指运行前编译,JIT是即时编译,边运行边编译。两种编译方式的主要区别在于是否在运行时进行编译。AOT保证了运行期间页面加载的高性能,JIT保证了Flutter在开发阶段可以达到亚秒级热重载,而且不会丢失状态,从而大大提升了开发效率。