原生 or H5,是个难题

本人负责的APP项目即将搭建团队启动开发了,现在纠结了,到底是原生还是h5?
领导们也在过问这个抉择,
考虑到APP项目的稳定性、扩展性和高性能的要求,其中的推送功能、离线功能、本地存储、数据交互较频繁且量较大的因素,技术选型的问题

原生开发模式

原生的缺点

  • 开发成本高,不同平台需要定制不同的app,开发人员需要多平台多语言,人力成本、时间成本较多,通用性差;
  • 上线时间不稳定,需要审核,特别是苹果审核机制,审核时间长短不一,对内容还有控制,国内Android APP市场也有类似的问题;
  • 版本控制能力差,版本发布到达率无法控制,多个版本更新发布,修复bug,无法保证及时送达到用户手中;获得新版本需要重新下载安装,虽然目前有增量升级方式逐渐改变,但是随之而来的其他问题如增量升级多版本控制也是个很头疼的问题

原生的优点

原生开发依然是开发者采用最广泛的开发方式,优点十分显著。相比其他开发方式而言:

  • 原生开发可以访问设备中的所有功能,运行速度更快,性能更高,而且可以启用优秀的离线处理和存储能力等等,提供最佳的用户体验,最优质的用户界面,最华丽的交互。
  • 原生开发人员众多,开发环境成熟,有许多的开源库提供开发人员调用,可是方便实现各种设计效果。

H5开发模式

H5开发是Html5开发的app,本质上运行在手机浏览器中的页面,一般使用app做一个壳套用浏览器运行H5的页面,由于H5的特性也有很多app使用半原生半H5的hybird app 开发模式。

H5优点

H5有许多优点,特别针对原生开发的缺点。

  • 直接在网页上调试和修改,几乎不用考虑用户机型和适配的问题,针对原生开发的平台碎片化、开发人力成本、时间成本高;
  • 版本升级优势,网页的升级与用户无关,用户无需下载更新安装,保证实时送达到用户手中;
  • 上线时间稳定、快速,不需要通过开发市场的审核,有收入分成的开发市场更是可以绕过收入分成。
  • 除此以外在视频媒体方面H5表现也十分优秀的。

H5的缺点

H5的缺点有许多,当新技术出现时候许许多多的人都在吹嘘它的优点,到真正实用时才对它的缺点正视。

  • H5加载大图片的时候性能会下降,大量用户访问同一个H5应用时性能会下降,响应速度比不上原生app,上网速度也不及原生app,H5不能自动处理动画上反复交互(网页游戏),需要借助css3、javascript。H5本质上是网页,无论是离线的还是在线的,它本质上是通过浏览器呈现到用户面前的网页,在手机上模拟得像app,网页的缺陷它无可避免。
  • 最大的问题是性能问题,这才是H5,原生开发对性能的支持远超H5,在用户体验上,H5的app绝对是占据下风的,app反应速度、流畅度等
  • 功能扩展与调用性能问题,对某些硬件摄像头、陀螺仪、麦克风等硬件支持较差,频繁调用这些硬件,H5不容易扩展,调用速度也不如人意。

原生 VS H5的总结

目前许多app都采用hybird app 开发(微信、支付宝等等),在h5适合的地方展示,在其他地方使用原生开发,以规避缺点,发扬优势。
纯H5 app适合小游戏、媒体、视频、营销产品、介绍等功能,大部分大型app属于原生、H5混合的hybird app。

react-native框架

介绍react-native之前,需要先提下react,react 是facebook在2013年开源的网站ui开发的js库,react-native是用react 进行原生app开发的框架,让广大开发者使用js和react开发应用,提倡组件化开发。react-native提供一个个封装好的组件让开发者使用,也可以相关嵌套形成新的组件。使用react-native可以维护多种平台(Web,Android和IOS)的同一份逻辑核心代码来创建原生app。从代码上看结构类似,细节有差别,facebook强调的是“learn once,write everywhere”,应用前端使用js和React来开发不同平台的ui,下层核心模块编写复用业务逻辑代码,提高应用的开发效率。

react-native的原理

react-native的优点和H5类似,跨平台、低成本开发、开发速度快、动态发布、一套类似代码维护三个平台。代码结构如下图:


image.png
  • 程序结构上,有两个工程分别是ios 、android,编译后回在相应文件夹中生成apk和app,界面代码是选中的index.android.js和index.ios.js,右侧的JS代码在这两个JS文件中几乎一模一样。

  • 它与web app很类似,但是绝对不是web app,查看开源代码,你不会发现webview的使用,也就是本质上react-native的app不是web app 或者hybird app,而是原生控件。那它是怎么实现的呢,react-native的原理如下图:


    image.png

    原理上看react-native在js端和java端互相有个映射关系,通过两端的配置表来实现,java端和js端持有同一张表,通信时靠这张表的各个条目的对应进行的。上面提到了facebook实现了组件让开发者调用,就是通过js的配置表调取原生控件,java调用js也是类似的情况。所以当我们使用复杂控件时,可以自己实现java代码,添加入配置表中,即可自定义心新的映射关系,让我们js调用自定义的复杂控件 , 当然web 、ios、androi需要实现不同的控件代码,只是js端的调用代码一样或者类似。

react-native的优点

  • 不用webview,摆脱了webview的交互和性能问题;
  • 有较强的扩展性,java端提供了基础控件,js可以自由组合使用也可以自定义组合控件;

react-native的缺点

  • 组件不全,第三方组件也不全,遇到某些特殊功能,需要花大力气写;
  • 性能方面也无法媲美原生,还是有一些损耗,特别是交换大数据时;
  • IOS版本略好,androi发展较慢;ios和android代码并非通用,有可能需要维护两套代码或者在代码中做一些判断;
  • 开发人员还是需要会原生开发,不然无法开发扩展的自定义组件;

react-native总结

react-native不是万能药,只是一种高效的解决方案,不要期望它解决所有的问题,要不要使用需要场景衡量;

  • 客户端转开发react-native感觉比较简单,比较JS大部分人都有基础,前端人员开发react-native理解原生部分的代码应该十分困难;
  • 相比原生海量的第三方控件和第三方包,react-native大部分道路还得靠自己摸索;
  • 不同端的代码风格和结构大体类似,但具体标签可能会不一样;
  • 版本发布频繁,一直是稳定1.0版本下面beta的0.xx的版本号,意味着稳定性是最大短板:目前得到经验是IOS版本比较稳定,android版本还不太成熟,android 版本2015年下半年发布,一直在0.*版本上更新,android1.0版本还没有发布;


    image.png
  • 听说qzone使用了react-native,但是crash率前10,react-native占8个,前5全是react-native,但是我一朋友项目使用过react-native,虽然有坑,但是不会有如此多crash;
  • 新技术,开发环境和代码编码方面都比较艰涩,有可能有很多坑,但是在界面简单,三端都要求,开发成本需要降低情况下可以使用react-native

最后个人总结:

  • 安卓和苹果自家的原生开发是整个APP的底层框架,或者说是基座,
    但没有银弹,不要指望一种技术通吃所有的业务场景,最完美的解决方案是取长补短,结合具体的页面场景来混搭:

  • 稳定性、扩展性、适配机型和运行性能的高要求,其中的推送功能、离线功能、本地存储、数据交互较频繁且量较大,乡下手机较低端或者领导高端机型的适配,建议大家就别绕过原生,毕竟是平台自家的原生开发才是亲生儿子,享有其他任何技术没有的优势。

  • 存在较多变更因素,可以采用H5或者React,比如需求未明确,需求变更较频繁,比较鲜明的场景就是内容发布,天天更新,如果只是内容变更,而样式不变倒原生开发也是可以的;

  • 具体技术场景相关业界标准的限制要求:自定义图层的在线地图,openlayers+GeoServer就是H5的地图开发标准,甚至是3D地图的Cesium解决方案,肯定是不适合安卓和苹果各自开发一套原生代码,但对于离线地图要求,还是要选择原生SDK的百度、高德地图;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容