美文网首页
第一章: 起步 1.1移动开发技术简介

第一章: 起步 1.1移动开发技术简介

作者: QYCD | 来源:发表于2021-12-16 17:34 被阅读0次

跟随《Flutter实战·第二版》学习,建议直接看原书

原生开发

原生应用程序是指某一个移动平台所特有的应用,使用相应平台支持的开发工具和语言,并直接调用系统提供的SDK API。比如,Android原生应用: Java或Kotlin;iOS原生应用: Objective-C或Swift。

原生开发优势:

  • 可访问平台全部功能
  • 速度快、性能高、可以实现复杂动画及绘制,整体用户体验好

缺点:

  • 平台特定,开发成本高,不同平台必须维护不同代码,人力成本大
  • 内容固定,动态化弱,大多数情况下,有新功能更新时只能发版
跨平台技术
H5 + 原生

部分内容通过H5方式实现,原生通过WebView来加载;
一般称这种H5 + 原生的开发模式为混合开发,采用混合模式开发的App我们称之为混合应用,如果一个应用的大多数功能都是H5实现的话称之为Web App。

混合框架一般都需要在原生代码中预先实现一些访问系统能力的API,然后暴露给WebView以供JavaScript调用。

JavaScript开发 + 原生渲染

React Native(RN)是2015年由Facebook开源的跨平台移动应用开发框架
RN中将虚拟DOM映射为原生控件的过程主要分两步:

  • 布局消息传递;将虚拟DOM布局信息传递给原生;
  • 原生根据布局信息通过对应的原生控件渲染;

优点:

  • Web开发技术栈,社区庞大,上手快,开发成本相对较低
  • 原生渲染,性能相比H5提高很多
  • 动态化较好,支持热更新

不足:

  • 渲染时需要JavaScript和原生之间通信,在有些场景如拖动可能会因为通信频繁导致卡顿
  • JavaScript为脚本语言,执行时需要解释执行(JIT),执行效率和编译类语言(编译类语言的执行方式为AOT)仍有差距
  • 由于渲染依赖原生控件,不同平台的控件需要单独维护,并且当系统更新时,社区控件可能会滞后;除此之外,其控件系统也会受到原生UI系统限制

JIT: 即Just In Time,指在执行时实时生成机器码
AOT: 编译类语言的执行方式为AOT,即Ahead Of Time,指在代码执行前已经将源码进行了预处理,这种预处理通常情况下是将源码编译为机器码或某种中间码

自绘UI + 原生

思路: 通过在不同平台实现一个统一接口的渲染引擎来绘制UI,而不依赖系统原生控件,所以可以做到不同平台UI的一致性。

PS: 自绘引擎解决的是UI的跨平台问题,如果设计其他系统能力调用,依然要涉及原生开发。

优点:

  • 性能高: 由于自绘引擎是直接调用系统API来绘制UI,性能和原生控件接近
  • 灵活、组件库易维护、UI外观保真度和一致性高;由于UI渲染不依赖原生控件,也就不需要根据不同平台的控件单独维护一套组件,所以代码易维护。
    由于组件库是同一套代码、同一个渲染引擎,所以在不同平台,组件显示外观可以做到高保真和高一致性;另外,由于不依赖原生控件,也就不会受原生布局系统的限制,这样布局系统会非常灵活

不足:

  • 动态性不足: 为了保证UI绘制性能,自绘UI系统一般都会采用AOT模式编译其发布包,所以应用发布后,不能像Hybrid和RN那些使用JavaScript(JIT)作为开发语言的框架那样动态下发代码。
  • 应用开发效率低: Qt 使用 C++ 作为其开发语言,而编程效率是直接会影响 App 开发效率的,C++ 作为一门静态语言,在 UI 开发方面灵活性不及 JavaScript 这样的动态语言,另外,C++需要开发者手动去管理内存分配,没有 JavaScript 及Java中垃圾回收(GC)的机制。
Flutter

Flutter是Google发布的一个用于创建跨平台、高性能移动应用的框架。其实现了一个自绘引擎,使用自身的布局、绘制系统。
2017年 Google首次发布Flutter。

相关文章

网友评论

      本文标题:第一章: 起步 1.1移动开发技术简介

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