前言

随着公司业务不断发展,移动开发项目越来越多,项目任务时间紧,我们内部开发流程是以项目为导向,有别于一般公司对产品不断迭代的做法,但移动端开发人员资源有限,需要在不同项目之间做业务场景切换开发,就会经常出现项目完成时间 Delay。面对这样的问题,我们该如何去解决呢?现在了解到的现状是每个业务组都有配备 Web 前端开发人员,那么是否能把涉及到业务模块分发给具体业务组 Web 前端开发人员去开发,剥离业务模块,我们移动端开发人员则专注于框架的开发或者手机端设备能力开发,比如可支持调用摄像头,监听网络状态变化,提供地理位置信息等等,有没有这样一套适合的解决方案呢,答案当然是有的。我们引入了可利用 Web 前端能力和移动端操作系统原生能力相结合开发模式,叫做 Hybrid 混合开发。

目录

  • 为何选择 Hybrid 开发模式
  • 在实践过程中碰到什么问题和解决
  • 经验总结

为何选择 Hybrid 开发模式

1,目前工作中碰到的问题

随着公司业务飞速发展,移动端定制的项目越来越多,同时每个项目的业务逻辑呈现出复杂化和差异化特点,每个项目都需要提供 Android 版本和 IOS 版本,增加开发成本,开发周期往往又会被拖长。同时近年来前端技术蓬勃发展,HTML5 大行其道,很多主流 APP 厂商都利用 HTML5 前端能力来编写业务模块并结合原生设备能力进行混合开发,常见的比如淘宝、京东、微信、携程等等。虽然目前业务项目多,但是用户交互体验要求不高,常见页面也是列表,表单居多,适合充分利用HTML 5能力,因此引入Hybrid 混合开发模式,这样只需要 Web 前端开发人员写一遍前端业务代码,却能同时在Android 系统和 IOS 系统中执行。

2,Web APP、Hybrid APP、Native APP 对比

目前主流应用程序大体分为三类:Web App、Hybrid App、 Native App,如图:


Web APP

Web App 指采用Html5 语言写出的 App,不需要下载安装。类似于现在所说的轻应用。生存在浏览器中的应用,基本上可以说是触屏版的网页应用。

优点

(1)开发成本低,更新快
(2)更新无需通知用户,不需要手动升级
(3)能够跨多个平台和终端

缺点:

(1)临时性的入口
(2)无法获取系统级别的通知,提醒,动效等等
(3)用户留存率低
(4)设计受限制诸多
(5)体验较差

Hybrid App

Hybrid App 从外观上来看是一个Native App ,实则只有一个UIWebView,里面访问的是一个Web App ,如新闻类和视频类的应用普遍采取该策略:Native 的框架加上Web 的内容。不同于Native App 需要针对不同的平台使用不同的开发语言(如使用Objective-C、Swift开发iOS应用,使用Java等开发Android应用),Hybrid App 允许开发者仅使用一套网页语言代码(HTML5+CSS+JavaScript),即可开发能够在不同平台上部署的类原生应用 。由于Hybrid App 结合了Native app良好用户交互体验和Web App 跨平台开发的优势,能够显著节省移动应用开发的时间和成本,Hybrid App 得到越来越多公司的青睐。

按照网页语言和程序语言的混合,Hybrid App 通常可以分为三种类型:

  1. 多View混合型:Native View 和 Web View 独立展示,交替出现。 其应用主体通常是Native App,Web技术作为补充。即在需要的时候,将 Web View作为独立的 View 运行,在 Web View内完成相关的展示操作。开发难度与Native App相当.比如:微信里的公众号文章使用的是Web View 。
  2. 单View混合型:在同一个View 内,Native View 和Web View 为层叠关系,同时出现。开发成本较高,难度较大,但是体验较好。比如:百度搜索同时实现充分的灵活性和较好的用户体验。
  3. Web主体型:应用主体是Web View ,穿插 Native 功能,主要以网页语言编写。整体开发难度低,基本可以实现跨平台,而用户体验好坏,主要取决于底层中间件的交互与跨平台能力。比如:项目管理工具 Basecamp 使用Web view呈现内容,调用系统原生 API 实现界面导航等功能来提高用户体验。

Hybrid App 也并非是完美的解决方案。由于其使用 HTML5,某些依赖于复杂的原生功能或者繁重的过渡动画的应用会出现卡顿。同时,为了模拟Native App 的UI和感官,需要投入额外的时间和精力;尽管可以跨平台,但是并不能完全支持所有的设备和操作系统。最后,如果应用的体验不够原生化,如一个简单的网站,则还有被Apple App Store拒绝的风险。

Native App

Native APP 指的是原生程序,一般依托于操作系统,有很强的交互,是一个完整的 App,可拓展性强。需要用户下载安装使用。

优点:

(1)打造完美的用户体验,性能稳定
(2)操作速度快,上手流畅
(3)访问本地资源(通讯录,相册)
(4)设计出色的动效,转场,
(5)拥有系统级别的贴心通知或提醒,用户留存率高

缺点:

(1)分发成本高(不同平台有不同的开发语言和界面适配)
(2)维护成本高(例如一款App已更新至V5版本,但仍有用户在使用V2, V3, V4版本,需要更多的开发人员维护之前的版本)
(3)更新缓慢,根据不同平台,提交–审核–上线 等等不同的流程,需要经过的流程较复杂

三者技术特性

如下图表中对比了Native App、 Hybrid App、Web App在不同方面的表现,可以根据实际情况选择最佳的解决方案。

3,主流 APP Hybrid 应用比例

那么在实际应用场景中,有哪些选择了Hybrid app呢?实际上,我们很可能使用过很多Hybrid app,却并没有意识到它们是借了Native台子唱戏的Web app。根据Appcelerator的官网,目前单是运行基于它的平台搭建的Hybrid app的设备就有近2.86亿台。国外常见的有LinkedIn、Yelp、Netflix、Wunderlist ,国内主流的大厂基本也是采用了Hybrid 模式,应该是应用很广泛,同时技术上也是成熟稳定。

4,选择 Hybrid 混合开发的原因

  1. Hybrid 开发模式在开发页面 UI 上有天生的便利,而原生的则如果需要一个比较华丽的界面,就需要花很长的时间去开发。

  2. 在业务上,看具体情况,有些简单业务在 Web上就可以处理,而如果涉及到复杂的业务,则可以用原生来写。

  3. 在基本能力上,原生的强,可以提供手机端独有的特性,但 Hybrid 则需要依赖 Javascript 中间层进行转化获取设备能力。

  4. 对于少界面,重业务的可以用原生,对于多界面,重效果的,可以用 Web 方式开发

在实践过程中碰到什么问题和解决

项目背景介绍

目前在一个项目实行的开发模式就是 Hybrid 混合开发,Web 技术与 Android 原生能力结合开发,Web 技术负责界面开发和相关业务, Android 原生能力则提供手机端特有设备能力,比如调用摄像头,网络状态监听,数据库操作等等。但这个项目的特殊性相关业务与我们提供的 Android 原生插件能力高度耦合,比如为这个项目提供数据库插件就是专门定制开发的,对于 Excel 插件的能力也是高度依赖一机一档相关字段,这跟我们选型用Hybrid 混合开发模式 的初心是相背离。我们初心是希望 Web 开发人员只需要专注于业务开发和界面绘制,原生部分则是提供相应的Android 设备能力集即可,每个插件跟业务是完全无关,这样就可以做到原生开发和Web开发互相解耦,两者之间通过接口隔离即可。

实践过程中碰到的问题

无论如何,一机一档项目是第一个应用 Hybrid 混合开发进行实战的项目,遇到的问题或者坑都是很正常,积极面对解决,并且不断进行总结和反思。把之前碰到的问题,简单罗列总结下:

  1. 开发人员调试困难问题。前端人员在开发时候是编写HTML5页面,所运行的环境跟 PC 端有很大的不同,因为需要运行在具体手机的环境上,因此需要每次编写完,需要通过移动端人员集成打包出一个APP 包进行安装验证,每新增或修改一个页面就需要重新打包验证,每次都需要集成测试,步骤繁琐,效率低下。
  2. 项目集成测试问题。Android 系统 Webview 和 PC 端浏览器内核版本差异问题导致加载效果不一致。
  3. 前端开发框架兼容问题。前端开发人员技术选型是基于 Vue.js 框架,这是一个渐进式 Javascript 框架,刚开始不支持。
  4. 文档不规范问题。在前期开发阶段,文档提供不详细,开发人员使用规则不清楚,导致沟通成本增加。
  5. Webview 性能问题。

如何解决

  1. 关于调试困难问题。提供一个调试工具叫做 Chrome DevTool,通过 Inspect 模式加载手机端里的 HTML5 页面,为何选择用 Chrome,因为Chrome 是目前主流前端开发调试利器,不仅能支持 Web 端开发,对于 HTML5 页面调试开发同样是能监听到 Javascript 报错或 CSS 报错,对于资源、网络、日志、内存等等,都是一步到位。同时在 APP 里提供一个在线调试环境,就是 Web 前端开发人员布置一个站点,在手机端通过 IP 地址远程访问站点,这样就可以在手机端实时看到刚刚修改内容是什么。
  2. 关于项目集成测试问题。在集成测试阶段,对Android 系统 Webview 和 PC 端浏览器内核版本区别有进一步认识,在Android 5.0 之前选用的是 Webkit 内核来加载 Web 资源文件,而在 Android 5.0 之后,则选用 Chromium 作为内核来加载,那么在为 PC 端浏览器端,如果你选择的是 Chorme 作为你默认浏览器的话,它的内核也是 Chromium 。尽管两者内核类型一样,都是 Chromium ,但两者加载 Javascript 效果上表现也不一样,比如最新浏览器版本可支持 ES 6 特性,但是在最新版的手机上就不一定 ES 6特性,目前通过调查 Android 5.0 之前的系统市场占有率,发现比例为不到20%,暂时适配到 Android 5.0 版本。
  3. 关于前端开发框架兼容问题。刚开始选用 Hybrid 开发模式时,对于公司内部 前端开发人员选用何种前端框架不甚了解,我们这边提供的 Demo 则是最原始的 HTML + Javascript + CSS 写法,以为前端人员只需要简单了解下就能上手,但在实践中发现却不是这样的。他们选型的前端技术是基于 Vue.js ,因为 Vue.js 是需要编译打包,生成发布的内容是混淆过的HTML + Javascript ,里面 Javascript 文件加载顺序使得我们开发 Javascript 插件调用引起问题,那样就会导致前端人员在调用具体插件能力时候,发现这个插件里的某个方法还没定义,就导致页面数据出错。后来通过了解 Vue.js 开发方式,调整项目工程中 Javascript 执行顺序, 确保具体插件调用在 Vue.js 执行前触发。
  4. 关于文档不规范问题。在前期开发阶段,前端人员没有统一查找目前已有插件能力的地方,仅仅根据我们提供的 Javascript 文件里的方法注释,虽然是针对每个方法的 Demo 用法,但是在实际开发中,前端开发人员也会调用出错。不是这个方法回调方法写错,就是参数类型传入传错,这样就导致的一个结果,前端开发人员不断地过来询问这个方法是如何调用的,我明明已经根据你的 Demo 写法进行编码了,为何还是报错的,前期的沟通成本还是很高。所以需要一个提供统一文档地方,里面写明了具体配置如何,写法如何,怎么是一步一步走,基本上可以避免类似的错误,更好的提高工作效率,减少沟通成本,所以一个规范的文档是很有必要的。
  5. 关于 WebView 性能加载问题。这是在解决 WebView 加载 HTML + Javascript + CSS 等资源时发现一个白屏问题,同时用 HTML5 做页面本身就会比原生加载来的慢。为了提高用户体验,在加载等待时,提供一个加载框来提示,等 HTML 资源文件全部渲染完毕后,等待框再消失,这样就可以避免一定的白屏现象。

经验总结

整体来说,为何会选择 Hybrid 混合开发模式是基于当前业务场景需要,技术是服务于业务发展,业务场景变化导致技术解决方案的选型也需要相应变化。面对以项目导向的开发现状,不能一昧追求最新最酷的技术,也不能对过时的技术方案过分保守,应该需要对当前业务场景进行判断,选择合适的解决方案才最佳的策略,没有一劳永逸的技术手段,只有时刻变化的业务需求和不断更新迭代技术方案。通过在一机一档项目中实战,面对问题,积极解决问题,也正是在解决问题过程中,产生新的想法和尝试,不断地完善框架能力,使得框架功能越来越全,进而更好的服务于业务开发问题,提高业务响应能力,降低开发成本,提升工作效率。

有关 Hybrid 开发模式实践总结的更多相关文章

  1. Hybrid App 开发模式

    开发移动App主要有三种模式:Native. Hybrid 和 Web App. 需要注意的一点是在选择开发模式的时候,要根据你的项目类型(图片类?视频类?新闻类?等),产品业务和人员技术储备等做权衡 ...

  2. javaWeb开发模式

    1.发展历程 2.模式分析 JSP+JavaBean模式适合开发业务逻辑不太复杂的web服务程序.这种模式下,JavaBean用于封装业务数据,JSP即负责处理用户请求,又显示数据(JSP编写业务逻辑 ...

  3. Hybrid App—Hybrid App开发模式介绍和各种开发模式对比

    什么是Hybrid App 最开的App开发只有原生开发这个概念,但自从H5广泛流行后,一种效率更高的开发模式Hybrid应运而生,它就是"Hybrid模式".Hybrid APP ...

  4. 文档驱动开发模式在 AIMS 中的应用与实践

    摘要:程序员常会说:我最讨厌别人写的代码没有文档,我也最讨厌自己需要写文档. 有一个很老的梗: 我最讨厌别人写的代码没有文档,我也最讨厌自己需要写文档. 有这种想法的程序员应该算是一个老鸟了,对于大多 ...

  5. H5 hybrid开发-前端资源本地化方案纪要

    H5 hybrid-前端资源本地化方案纪要 就整个行业来说,大前端是趋势,现阶段,native方面除了一些偏CPU密集型工作与操作系统底层API方面的工作外,H5基本都可以满足需要. 目前的工作更偏向 ...

  6. React jQuery公用组件开发模式及实现

    目前较为流行的react确实有很多优点,例如虚拟dom,单向数据流状态机的思想.还有可复用组件化的思想等等.加上搭配jsx语法和es6,适应之后开发确实快捷很多,值得大家去一试.其实组件化的思想一直在 ...

  7. 前端文摘:Web 开发模式演变历史和趋势

    今天的<前端文摘>给大家分享一篇玉伯的文章.文章详细介绍了 Web 开发的四种常用模式以及未来可能成为流行趋势的 Node 全栈开发模式,相信你看了以后一定会有收获. 您可能感兴趣的相关文 ...

  8. [转]Android开发最佳实践

    ——欢迎转载,请注明出处 http://blog.csdn.net/asce1885 ,未经本人同意请勿用于商业用途,谢谢—— 原文链接:https://github.com/futurice/and ...

  9. 《ASP.NET MVC4 WEB编程》学习笔记------Entity Framework的Database First、Model First和Code Only三种开发模式

    作者:张博出处:http://yilin.cnblogs.com Entity Framework支持Database First.Model First和Code Only三种开发模式,各模式的开发 ...

随机推荐

  1. [js高手之路]深入浅出webpack教程系列9-打包图片(file-loader)用法

    我们还是接着上文继续,本文我们要讲的是图片资源的打包,图片在静态排版中,经常出现的两个位置是css通过background引入背景,还有一种就是在html模板文件中用img标签引入的方式,如果要在we ...

  2. [转] Java se 7新特性研究(二)

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp82   今天主要研究Java se 7中异常处理的新功能.从今天开始正在 ...

  3. Linux-mount命令和umount命令 (8)

    mount:用于挂载文件系统,使能访问其它文件系统中的资源 umount:用于卸载已挂载的文件系统 mount: 格式: mount [-参数] [设备名称] [挂载点] 其中常用的参数(参数默认自带 ...

  4. Cetnos搭建vsftp服务器

    1.首先yum安装vsftp server   以3.0.2为例 命令:yum -y install vsftpd 2.配置文件  vsftp.conf 具体配置内容如下: anonymous_ena ...

  5. List,map,Set区别

    List按对象进入的顺序保存对象,不做排序或编辑操作.Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List).Map同样 ...

  6. 转: 【Java并发编程】之十七:深入Java内存模型—内存操作规则总结

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17377197 主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规则, ...

  7. java可访问修饰符

    修饰符 同一个类中 同一个包中 不同包的子类 不提供包的非子类 private √ friendly(省略) √ √ protected √ √ √ public √ √ √ √

  8. 团队作业4——第一次项目冲刺(Alpha版本) Day7

    首先和助教及老师表示抱歉,博客确实当时就写了,但是一直不算写好,因为这几天卡住了,预计实现的功能实现不了,进度跟不上,现在也在寻求解决方法. 1.站立式会议: 遇到的困难和收获:在开发的过程中其实遇到 ...

  9. 201521123069 《Java程序设计》 第8周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 (1)泛型允许指定集合中元素的类型,在编译时就可以进行类型检查,避免运 ...

  10. 201521123100 《java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...