原生开发
优势:
-
- 可访问平台全部功能(GPS、摄像头);
- 速度快、性能高、可以实现复杂动画及绘制,整体用户体验好;
主要缺点:
-
- 平台特定,开发成本高;不同平台必须维护不同代码,人力成本随之变大;
- 内容固定,动态化弱,大多数情况下,有新功能更新时只能发版;
hybrid技术(h5+原生混合开发)
原理:将App中动态变动的内容通过h5来实现,通过原生网页加载控件webView。h5代码只需一次开发就能同时在Android和iOS两个平台上运行,减少开发成本,这种h5+原生开发模式成为混合开发,采用此方式开发的APP成为混合应用或Hybrid APP,如果一个应用大多功能是h5实现的,我们称之为 web App.
混合开发技术点
混合开发中,h5代码运行在webView中,而webview实质就是一个浏览器内核,其JavaScript依然运行在权限受限的沙箱中,所以大多数系统能力没有访问权限,如无法访问文件系统,不能使用蓝牙等。所以h5不能实现的功能都需要原生去做。混合框架一般会在原生代码中预先实现一些访问系统能力的API ,暴露给webview以供JavaScript使用,这样一来webview就成了JavaScript与原生api通信桥梁,主要负责JavaScript与原生传递消息。(我们把依赖于WebView的用于在JavaScript与原生之间通信并实现了某种消息传输协议的工具称之为WebView JavaScript Bridge, 简称 JsBridge,它也是混合开发框架的核心。)
react Native
React Native 是React 在原生移动应用平台的衍生产物,那两者主要的区别在于虚拟DOM映射的对象是什么?React中虚拟DOM最终会映射为浏览器DOM树,而RN中虚拟DOM会通过 JavaScriptCore 映射为原生控件树。
JavaScriptCore 是一个JavaScript解释器,它在React Native中主要有两个作用:
- 为JavaScript提供运行环境。
- 是JavaScript与原生应用之间通信的桥梁,作用和JsBridge一样,事实上,在iOS中,很多JsBridge的实现都是基于 JavaScriptCore 。
weex
Weex是阿里巴巴于2016年发布的跨平台移动端开发框架,思想原理和react native类似,最大不同在语法层面,weex支持Vue和rax语法,Rax 的 DSL(Domain Specific Language) 语法是基于 React JSX 语法而创造。与 React 不同,在 Rax 中 JSX 是必选的,它不支持通过其它方式创建组件,所以学习 JSX 是使用 Rax 的必要基础。而React Native只支持JSX语法。
fultter
flutter是Google发布的一个用于创建跨平台、高性能移动应用框架,实现自绘引擎。主打跨平台、高保真、高性能。开发者通过dart语言开发APP。
高性能:Dart在 JIT(即时编译)模式下,速度与 JavaScript基本持平。但是 Dart支持 AOT,当以 AOT模式运行时,JavaScript便远远追不上了。
Dart语言(flutter之所以选择Dart理由如下)
JIT和AOT
目前程序主要两种运行方式:静态编译与动态理解。静态编译的程序在执行前全部被翻译为机器码,通常将这种类型称之为AOT即“提前编译” ;而结实执行的则是一句一句边翻译边运行,通常讲这种类型称为JIT。 AOT程序的典型代表是用C/C++开发的应用,JIT的代表JavaScript、Python等,所有脚本语言都支持JIT模式,注意点是AOT和JIT 指的是程序运行方式,和编程语言并非关联。
1. 开发效率高
Dart运行时和编译器支持Flutter的两个关键特性的组合:
基于JIT的快速开发周期:Flutter在开发阶段采用,采用JIT模式,这样就避免了每次改动都要进行编译,极大的节省了开发时间;
基于AOT的发布包: Flutter在发布时可以通过AOT生成高效的ARM代码以保证应用性能。而JavaScript则不具有这个能力。
2. 高性能
Flutter旨在提供流畅、高保真的的UI体验。为了实现这一点,Flutter中需要能够在每个动画帧中运行大量的代码。这意味着需要一种既能提供高性能的语言,而不会出现会丢帧的周期性暂停,而Dart支持AOT,在这一点上可以做的比JavaScript更好。
3. 快速内存分配....
如何学习:StackOverflow全球最大程序员问答社区,flutter中文网社区,掘金