【技术杂谈_一家之言】谈谈Hybrid App、Native App技术选型

【技术杂谈_一家之言】谈谈Hybrid App、Native App技术选型

Native:
是指使用Native技术来开发App。比如iOS系统使用iOS原生语言Object-C/Swift去开发iOS App;Android系统使用Android原生语言Java/Kotlin去开发Android App。因此Native App能完整访问平台上所有可用的Api(不必使用任何插件,虽然它们也有用),并且无需牺牲性能。因此,“同等质量”的Native App比Hybrid App(后面会提到)会更加“丝滑”。

(H5 App:
即直接使用Web技术开发App,但因用户体验感较差、反应速度慢页面切换流畅性较差、无法直接调用手机硬件(摄像头、麦克风等)、 并且对于用户来说这种App很难被用户发现,因此此开发技术已经被淘汰。)

Hybrid:
是指使用Hybrid(混合)技术来开发App。混合,即混合使用了Web技术、Native技术去开发App。地理定位、相机等继续使用原生模块,业务板块通过Web技术去开发,原生模块和Web业务模块之间的通信通过js等技术去实现,即增加了一层中间层、无法直接访问原生Api,损失了一定的性能。因此,“同等质量”的Native App比Hybrid App会更加“丝滑”。(两次提到“同等质量”了就展开讲一讲,之所以加“同等质量”,是因为一般我们在谈论或者比较Hybrid、Native技术的时候,都是参照理论模型忽略人的因素的;但在实际项目开发中、实际工作模型中,人是及其关键的因素,影响比重可能占到70%-80%,即一个开发能力较弱的工程师即便使用Native开发技术开发的App也未必非常“丝滑”,可能还非常卡顿,比如在主线程中加了各种操作;反而Hybrid开发技术因为上手快、模块化开发,开发出来的App反而相对比较“丝滑” )

同时,一般Hybrid App开发技术都会对Web渲染引擎进行优化,使得用户体验更加良好。并且像股票中的K线图这类Web技术再怎么优化都无法达到商用用户体验的,会使用Native技术进行开发,然后进行混合编码,即,即便同一个页面都可以实现一部分用Native技术进行开发、一部分用Hybrid技术进行开发,来保证达到能够商用的用户体验。

(常用的Hybrid开发技术国外有Google的Flutter、Facebook的React Native、PhoneGap(Cordova)等等,国内有APICloud、Appcan、WeX5等等)

我们回到主题,so hybrid or native?
我们先不做回答或者选择,我们再来比较一下这几种技术的优势劣势。(当然主要是Hybrid和Native技术)

Native App开发技术

优势:

  • 提供最佳的用户体验,最优质的用户界面,最华丽的交互
  • 针对不同平台提供不同体验
  • ...等等

劣势:

  • 移植到不同平台上比较麻烦
  • 应用开发成本较大:需要Android工程师、iOS工程师分别开发
  • 应用维护成本较大:需要维护Android、iOS两条技术栈
  • 应用开发周期较长:需要Android、iOS分别开发;由于Android工程师、iOS工程师技术能力存在差异、理解力存在差异,并且测试工程师需要分别测试,导致Android、iOS交付周期不一致、交付质量不一致、测试周期耗时较长。
  • ...等等

Hybrid App开发技术

优势:

  • 跨平台开发:一次编码开发iOS App、Android App(以前还能同时开发Windows Phone App)(考虑效率和成本,跨平台开发是我们一直的追求,比如PC时代CS应用向BS应用的演进)
  • 代码复用高,能较大提升开发效率:可以复用较多Web应用的代码;会把一些常用的原生功能比如拍照、定位等封装成通过模块(或者叫通用构件),开发时可以直接复用。(其次每次App开发,主要就是做业务功能开发,像拍照、定位等基础功能每个App都是一样,根据模块化编程思想,就应该把这些基础功能做成模块,以提高复用性,提高开发效率)
  • 技能复用,学习曲线低:会Web技术(JavaScript、HTML、CSS),就比较容易上手Hybrid App开发技术
  • 开发成本较低、维护成本较低
  • 缩短开发周期:一次交付iOS、Android应用
  • 缩短测试周期:iOS、Android应用交付时间一致,不需要分别等待;不用分别对iOS、Android进行业务功能测试,只需做一次业务功能测试,再做一次兼容性测试(native开发也需要);并且iOS、Android侧bug修复的时间是一致的,不需要分别等待
  • 支持热更新、热修复:如上所说一次开发其实95%+是做业务开发,业务开发又基本100%是使用Web技术开发,Web技术覆盖打开最新版本就是最新的内容了(就像我们每次打开网站都是他的最新版一样,开发发版对用户是透明的),所以其实可以绕过App Store、各大Android应用商店审核去发布最新功能或是热修复线上bug的(但是比较遗憾,这条路被苹果以安全因素为由彻底堵死了)
  • 可以快速验证商业模式:如上相对来说,hybrid开发周期短、开发成本低,就可以用来快速验证商业模式(验证成功后,有足够资源后,如果用户体验也是一个重要考虑点,可以移植到native,有些公司就这么干的)
  • 能商用,虽然性能、体验较同质量的Native App差,但是是足以商用的。比如淘宝、京东、滴滴、Uber、饿了吗、美团的App都已部分使用Hybrid开发技术,而且一些公司的技术团队已经开始积累Flutter的开发经验
  • ...等等

劣势:

  • 因需要通过中间层去调用原生Api,有一定性能损耗,相对native应用用户体验稍差
  • 大量图形和过渡情况下的性能问题。(比如前面提到的:像股票中的K线图这类Web技术再怎么优化都无法达到商用用户体验的,会使用Native技术进行开发,然后进行混合编码)
  • ...等等

最后,我们再回到主题,so hybrid or native?
没有对或者错,只有最适合自己的,我想大家心中都有符合自己情况的答案了。

上一篇:【技术杂谈_一家之言】Java生态2019


下一篇:Scala学习笔记