Hhybrid App顾名思义就是原生 App 与 Web App 的结合。它的壳是原生 App,但是里面放的是网页。 可以理解成,混合 App 里面隐藏了一个浏览器,用户看到的实际上是这个隐藏浏览器渲染出来的网页。9 o( C0 P9 t8 ~# p6 C8 B
随着 Web 技术和移动设备的快速发展,Hybrid 技术已经成为一种最主流最常见的方案。一套好的 Hybrid架构方案 能让 App 既能拥有极致的体验和性能,同时也能拥有灵活的开发模式、跨平台能力以及热更新机制。+ @" i- S, R6 `! a8 b
<hr>
& Q$ ^6 T3 k$ A/ n2 X
* t+ l3 B8 }# }& O1 E& X首先我们先看看目前市面上常见的一些APP开发技术架构+ y7 p& A3 g4 u+ R; K1 r
Native App 开发模式
, e- K: B+ ^) W% @& \- d' ]' a/ _; {# u4 Y* Y
/ Z4 I) ~' ~7 R% N" s- B- I( a' @
! J3 c% X% j6 U6 w+ j
Native App,原生APP,使用原生(即Android或iOS)开发的APP。应用的性能好是毋容置疑的,可以使用系统的所有硬件和软件 API,比如 GPS、摄像头、麦克风、加速计、通知推送等等,能充分发挥系统的潜力。
4 r5 Q# H( P- [* p' P; @& g; d/ c1 [- \, j3 r( \
8 @- D: U* @0 h) k但是也存在些许弊端:
: n: ~; m0 E" ?3 }/ Q' I% s6 t, ~+ k, v
* b: Q" L% Y( |7 @( C! U! F2 C1 \# \6 O1、需要建立不同的开发团队,大公司一般都有 iOS 和安卓两个开发团队。如果出现第三个平台(例如Windows Phone或者华为鸿蒙 OS),可能就要组建第三个团队,成本就更高。+ n5 }6 K& f3 d6 R
2、原生 App 使用底层操作系统的语言,都是很重的编译型语言,开发和调试成本相对较高,时间周期长。
) V: Z; Z$ O* y5 a1 _4 u3、原生 App 必须下载安装才能使用,只要升级版本,就必须重新下载安装。用户往往不愿意更新版本,厂商被迫不得不长期支持很久以前的旧版本。- v: q9 ?- O, w& t
4、无法跨平台:Android和iOS都需要开发各自平台的版本——开发成本高,还需要经过应用商店审核,常常会导致两端发版不一致& @' o; ~# Q; c% @
5 S v, ]2 U) b1 a
# d2 W2 v$ p5 R. O. @: V5 u3 i; A相信以上问题对于移动开发者都有共鸣
2 J; m' G( x& t# S# d6 x! yWeb App 开发模式
/ \4 s+ f8 Q5 J; J+ i* ~; m
! [ Q2 f3 y* C i* z. Z4 o9 ?8 A& h# D% ]
: H+ Z# ]- q1 N相信HTML5技术的兴起给Web App注入了新的生机。9 B# X4 n: {- V: R$ M
5 M) l. [" e: ]( O) Y
/ n+ C& S: U8 |9 Q3 D5 M( ?Web App,一般指的是基于 Web 的应用,基于浏览器运行,无需下载安装,基本上可以说是触屏版的网页应用。这类应用基本上是一个网页或一系列网页,旨在在移动屏幕上工作。* n, Z. y! a I
( }, H: O5 _1 N- a2 j
4 L) x* _. ~- nWeb 网站一般分为两种:
, ]3 F! h8 P3 J! g: Y
8 J: V& }/ g4 z! l& _9 K; H6 o% ?& k8 `& B4 e: q- u) q- i! h
MPA(Multi-page Application)
- S7 i- c; n c; w6 r- { sSPA(Single-page Application)
8 y: R2 T1 u, _5 r; R一般的 Web App 是指 SPA 形式开发的网站。* w7 p, t' g4 k
' E" v% J) ~& k3 l
# E& W( K9 _; ?' R/ U优点:
# }# J; _+ f1 u开发和维护成本低,可以跨平台,调试方便;
& A( k- k {4 T前端人员开发的代码,可应用于各大主流浏览器(特殊情况可以代码进行下兼容),没有新的学习成本,而且可以直接在浏览器中调试。
5 U0 z4 k0 d' i6 O更新最为快速;
1 i. `. J* z9 G+ C4 r0 D由于web app资源是直接部署在服务器端的,所以只需替换服务器端文件,用户访问是就已经更新了(当然需要解决一些缓存问题)。4 }2 G0 P& H4 P# R, O0 K
$ y" M- G6 ]- A5 Y3 a7 N+ ]+ h
( d/ I' _6 i. b0 Y! E' m Y" E
缺点:2 H4 W6 h3 C( W6 d! Q4 M
性能低,用户体验差;
) y8 N# S- {. C3 @5 c8 Z由于是直接通过的浏览器访问,所以无法使用原生的API,操作体验不好。0 d) ^. u/ X) ]/ G4 v" \, K
依赖于网络,页面访问速度慢,耗费流量;# W) F+ G( ^, C* R9 H
Web App每次访问都必须依赖网络,从服务端加载资源,当网速慢时访问速度很不理想,特别是在移动端,对网站性能优化要求比较高。! g/ D! o* [) o" a( G2 w. q) A' K
功能受限,大量功能无法实现;# Q0 `$ \- G( w9 J/ x% e! C
只能使用 HTML5 的一些特殊 API ,无法调用原生 API ,所以很多功能存在无法实现情况。" d! r/ C: w* c. K: s" A3 c
临时性入口,用户留存率低;6 H) W& r, n0 N( _
这既是它的优点,也是缺点,优点是无需安装,确定是用完后有时候很难再找到,或者说很难专门为某个web app留存一个入口,导致用户很难再次使用。4 _9 R4 p: K6 L2 r
. E$ J% G: l% c! a6 ]4 s
4 T# n5 i8 k9 `
Hybrid App 开发模式
' u1 {+ ]4 e) x; ]' ?) A5 t* W4 |; |, o$ N8 L5 [, h" i7 Z
Hhybrid App顾名思义就是原生 App 与 Web App 的结合。它的壳是原生 App,但是里面放的是网页。 可以理解成,混合 App 里面隐藏了一个浏览器,用户看到的实际上是这个隐藏浏览器渲染出来的网页。
- Z n" p: f0 |* K) G) }5 H混合 App 的原生外壳称为"容器",内部隐藏的浏览器,通常使用系统提供的网页渲染控件(即 WebView 控件),也可以自己内置一个浏览器内核。结构上,混合 App 从上到下分成三层:HTML5 网页层、网页引擎层(本质上是一个隔离的浏览器实例)、容器层。
, [( ]2 _+ T9 ]# M
7 m- t' I; b0 L) I" z5 y/ v& x4 @" j. y' N* M; ^
混合 App 同时具有原生 App 和 Web App的优点,又可以避免它们的一些缺点。具体来说,可以总结为三点。
4 }. n% ^- h- }+ T. w! S1 \9 n(1)跨平台( w7 L6 y: d8 L. I/ H' p* ]6 T
Web 技术是跨平台的,开发者只写一次页面,就能支持多个平台。也就是说,混合 App 只需要一个团队就够了,开发成本较低。: _& I+ G+ n( }& ~8 t2 q
(2)灵活性
( Z; ?" t7 k& J- s l% @& n' }混合 App 的灵活性大,很容易集成多种功能。一方面,混合 App 很容易加载外部的 H5 页面,实现 App 的插件结构;另一方面,Web 页面可以方便地调用外部的 Web 服务。
9 c% U' \% c7 [5 J(3)开发方便, M# J% O! A- N% X& Z
Web 页面的调试和构建,远比原生控件简单省时。页面的更新也容易,只要在服务器上发布新版本,触发容器内更新就可以了。另外,Web 开发人员也比较容易招聘,传统的前端程序员可以承担开发任务。6 g' d. e: F4 w. e* s+ H
) B; D5 I9 G5 A; z1 \1 p
- @$ ]8 t) i: t: k, A3 S3 u
现在比较流行的混合方案主要有三种,主要是在UI渲染机制上的不同:
' E, B4 w) X4 M* V4 j" s. N* E5 L1 d
8 c+ V3 ^7 r; @% @4 z3 [" p
4 M6 W8 {% E) I8 @- 基于 WebView UI 的基础方案,市面上大部分主流 App 都有采用,例如微信JS-SDK、Cordova,通过 JSBridge 完成 H5 与 Native 的双向通讯,从而赋予H5一定程度的原生能力。) D* G4 l; C9 o# W/ [: Q
- 基于 Native UI 的方案,例如 React-Native、Weex。在赋予 H5 原生API能力的基础上,进一步通过 JSBridge 将js解析成的虚拟节点树(Virtual DOM)传递到 Native 并使用原生渲染。
' v% w5 T1 h' k 6 ~. T/ }3 u! u! z. y
/ B' e0 y) D6 o在此特别强调一下第三种方案——基于小程序方案,也是通过更加定制化的 JSBridge,并使用双 WebView 双线程的模式隔离了JS逻辑与UI渲染,形成了特殊的开发模式,加强了 H5 与 Native 混合程度,提高了页面性能及开发体验。6 d3 c* x* i! g4 o5 N. P
. B) v' h: [' [" Y3 r+ [: f( a* c* p' e4 @
小程序在JS-SDK的基础上,一方面进一步开放和拓展原生的能力给到Web前端调用,另一方面,页面渲染(Webview Render)的UI层和逻辑层,使用了两个独立的线程。如下图所示:
4 a( X5 D+ q5 W: h( n* ]( T
$ A* [$ ]- n! i `! o& L9 _' ^6 e, I$ b$ p! r2 l3 v
( i' h* B% Q4 c \; n- A
: f) C6 @- t# Y) i- A小程序运行时本质上是一个处理Web页面渲染、数据逻辑交互的虚拟机,这个虚拟机提供了丰富的原生能力供小程序调用(API、组件、AI能力等),极大的拓展了Web应用的能力边界,尤其是在诸如滚动视图(scrool-view)、导航(navigator)、图片预览(cover-image)等组件的提供,使得前端开发人员在使用现有的web前端技术,就可以开发出接近原生体验的应用。 y; o% o3 z i% x! S. Z
技术选型: N/ U4 `2 z( ?. R
0 \/ `" H" A7 g; c p3 m+ `/ T7 q; ?/ b5 W6 @4 |
$ Z! a8 S$ }3 U" n) C$ g0 `任何技术方案的选型,其实都应该基于使用场景和现有条件。基于公司现有情况的几点考虑,在方案一上进一步优化,更加适合我们的需求。
4 m" t0 K* y$ ^3 _ m: u8 u \; Q
0 S* D# a* n7 c$ Z2 r% Q. Y9 K( p- E/ H w
/ |6 t/ C6 ^' D" J6 \
- 业务功能可以快速迭代、灵活开发并且支持线上热更新的机制。, Y% Q: t8 {5 M J6 p
- 公司业务上,并没有非常复杂的UI渲染需求,而且公司已经有一套完善的前端框架并且已经非常成熟,因此我们并不强需类似 RN 这样的方案。
* y' u7 B7 k6 S - 产品的核心能力是需要调用系统权限,因此单纯的 H5技术能做的事非常有限,不能满足需求,需要通过 Hybrid 技术来强化,例如「Native+小程序」技术框架( K: y& V+ r2 u; Q9 D# k; G
) S: |# h: [$ T$ a) F% _. X
, }" D9 Z, J1 G* m7 L0 ?' H那当你获得这么一个「小程序运行时引擎」,你会如何改造你的App?
. C% d( j- m. r4 Z9 N; o) R+ c/ L3 Y) Y( Q% _3 o" v
- D' R- I- W1 F9 }( a$ n0 I
* z$ p- b% Q% m9 `
以往业务部门要发布一些新的功能的时候,用户必须要主动更新App,而且任何一个局部功能的变化升级需要去重新去应用市场再操作一次,成本很高。由于并不是所有的用户都去更新,造成IT团队需要花费大力气去维护多个不同的版本。这种方式造成用巨大的资源浪费和用户体验的不便利。
9 b/ q2 E* Q# a4 `4 c J1 h+ H
/ e9 ^% E5 E5 x9 s4 }
& _ C- p* R" t5 m6 @8 T如果用小程序,这个问题会迎刃而解。首先,小程序可以独立的去更新,App作为了一个载体,很长的一段时间内,不需要被频繁更新。其次,每个小程序可以按照业务具体需要去独立发布各自的版本,不同的小程序之间的更新升级彼此独立、互不干扰。最后,由于小程序运行的沙箱机制,保证了不论是哪个小程序出现Bug、崩溃等情况,不会拖累应用本身,即便出现严重问题,也不过就是把它下线即可。9 w# A' B4 y8 k0 S1 i8 u3 ?% B
+ M+ \ V; @" a" Y" h* A
目前市面上也提供了小程序的通用解决方案,今天为大家介绍一下——FinClip(https://www.finclip.com/product?channel=toutiaoseo)。它的最大特点,就是能够让任何 App 运行小程序。
% R5 }/ K+ C% z9 A4 ^, x4 K只需要在你的 App 里面,引入它的 SDK,就能加载运行外部小程序了。除了 SDK,它还提供一个后台管理系统,统一管理小程序的上架和下架,以及收集和分析小程序数据。" o* n) K! f: {! s2 O2 e
6 P" U, C; n8 \1 {0 d3 D
4 W7 q, {) G& f; E& N9 B& ^. D
1 K( a w n+ @! ~
2 |$ ~# c, |+ i( J3 o而且FinClip完全遵循微信小程序的开发标准与规范。也就是说,现有的微信小程序可以不改一行代码,直接放进你的 App 里面,运行效果保持不变,不必额外二次开发和改造,大大节省了人力成本。- J6 h8 `& K( r: M! d# e
不仅如此,FinClip 还支持手机以外的多种终端,包括 Linux、Windows、MacOS、麒麟等操作系统。这意味着,PC 端、车载设备、智能电视都能使用小程序了,实现了小程序的“一次开发,到处运行”,同时触达众多流量平台,而不仅仅局限于微信生态。& }0 U1 t8 s9 z/ p
- F2 y/ h' v/ \2 I" x$ g8 Q- o
. n9 u; T! U5 e6 d1 Y
7 E8 S1 e+ b; [* L7 a( g' j* K
4 r" W1 T% M) ]8 r! M% KFinClip 还提供小程序 IDE 开发工具,界面与微信小程序的开发工具类似,自带调试和真机预览,简单易上手。你可以在这个 IDE 里面,对现有项目进行二次开发,扩展功能和接口,或者从零开始写出一个小程序。3 G6 a4 r" y6 r: W% H% q( ?
任何事物的发展都具有周期性,显然小程序的这波红利已经到来, 今天的创新可能就是明天的标配。当务之急,尽早上船拿到“船票”。 |