Web技术是如何与Native App共存的

如果说以前的微信公众号还是一个媒体化的平台,那么2016年的公众号会有一种新的形态,叫应用号。应用号预示着比公众号更强大的功能、更优质的体验以及更丰富的服务。应用号的出现是微信产品的一次重大升级,无论是为了体现用户价值观?还是追求产品商业化?作为一名技术人员,我不想过多讨论,而是更愿意从技术的角度来分析一些其中web技术的发展。
微信做为一款超级app,有着巨大的入口流量,需要不断的产生动态的内容,web技术在微信中一直发挥中重要的作用。如果说公众号还是标准web技术+简单桥接扩展,那么在应用号中,web技术将依靠更强大的web执行容器在微信中发挥更大的作用。我们可以来看看在微信中web与native技术的结合过程,从嵌入系统webview, 到x5增强浏览器引擎,到功能扩展的js-sdk,再到刚刚发布的weui,再到应用号。微信团队一直推进着web技术在nativeapp中融合与发展。
随着移动设备的快速更新换代,以html5为代表的web技术在nativeapp中有了越来越多的应用场景。一方面是native app开发团队在保证功能和性能的同时,需要提高开发效率,降低运营成本;另一方面是app用户在满足需求和体验的同时,需要更快的获取动态的内容;这些都需要web技术在app开发中发挥越来越多的作用和价值。但这种价值绝对不能称为脱离或颠覆。在今天,更多的是“融合”!
我从06年开始做了10年浏览器引擎和跨平台app引擎。见证了这10年来,web技术在native app中不断的应用和发展。从功能机到智能机,从k-java到移动app,从webbrowser到webkit,我们可以将web技术在native app中的发展分为5个阶段,内置、嵌入、桥接、混合、融合。
一、内置自定义web容器时代
2010年之前,那时还是feature phone为主流的时代,硬件配置低,系统功能弱,手机应用以内置为主。但sp业务已得到长足的发展,用户需要动态获取内容来满足资讯和娱乐的需求。这个时期web技术在native应用中的使用方式是native应用开发商与浏览器厂商合作,在应用中内置某个厂商的浏览器引擎,作为web的执行容器。应用从服务器端动态下载web文件,解压后交给web容器离线运行。内容和功能都很简单,通常就是图片+文字的排版,以及按键交互。形式如图书、杂志、小游戏以及小工具等。这类需求也驱动了当时一些主流浏览器厂商去思考浏览器的在传统价值以外的作用,并积极参与到w3c widget规范的制订。这一时期也是移动浏览器厂商的黄金时代。
二、嵌入系统webview时代
2010年,android系统在国内兴起,iphone也逐渐普及,以android和ios为主的原生应用生态系统开始不断的培养用户到appstore下载应用,以及以独立app作为入口的使用习惯。这一时期app开发需求也逐渐增长,但是竞争还不算激烈。客户可以接受原生的开发成本和周期。应用开发商利润丰厚,开发者纷纷开始学习android和ios app开发。系统自带浏览器的功能和性能已经超过当时的第三方浏览器。在app中通过嵌入系统webview来展示本地或服务器端的界面已经比较常见。这一时期web技术的应用以内容展示为主,所能完成的功能被限制在标准浏览器支持的范围内。而传统浏览器厂商依靠lisence收费的商业模式终结,并且逐渐淡出市场。
三、webview的桥接扩展时代
2011年, android和ios在手机系统中逐渐已经占据了统治地位。app开发需求迅速增长,竞争加剧,原生开发人员供不应求,客户开始考虑成本和周期,开发商开始考虑效率和利润。开发者开始思考webview在展示内容之外是否还可以完成部分app功能。由于系统内置的都是webkit引擎,支持标准的web技术,并且支持开放扩展。国内外以phone gap为代表的厂商开始了对webview的桥接扩展,并且形成一套完整的调用机制,在js中可以任意调用原生接口。
这种桥接扩展主要集中于设备功能,提供的是一种能力,但是更多具体的映射还需要开发者自己来完成。由于没有涉及窗口系统、交互响应、动画效果,事件管理以及应用生命周期管理等的扩展,所以虽然开发出的app基本功能可以满足需求,但是性能和体验太差。此时通过webview+桥接扩展的方式,原生工程师和web工程师一起协作已经可以完成一款 app的开发了。这一时期标准web技术(html,css,js)和桥接扩展机制在移动app中的使用趋势也造成了一批传统的使用非标准web技术(自定义xml标签和js语法)的移动中间件厂商的消亡。
四、移动应用开发平台的hybridapp时代
从2012年开始,app创业火爆,app需求持续增长,有了更多的应用场景和行业结合:lbs,iot,o2o,社交、视频等等。一方面是使用html+css进行界面布局存在dom树更新及单层渲染的性能问题,而且标准javascript规范支持的能力非常有限,需要大量的扩展来满足行业需求;另一方面是原生开发模式成本高、效率低,行业呼唤更高效的跨平台开发模式。
这一时期,国内外跨平台技术也是层出不穷,不断涌现出新的产品,但我们可以其他们分为两类:
·一类是继续坚持使用html+css进行界面布局,通过对页面渲染进行优化和对标准js进行原生扩展来实现跨平台app开发。
· 另一类是放弃使用html+css的界面布局,选择一种第三方的中间语言(如js,c#等)来映射成android和ios的系统调用,从而实现跨平台。这种方式的界面布局需要通过中间语言组合系统ui组件来完成,目前看渲染性能是比html+css的方式要好些,但这样也失去了html+css布局的标准性和灵活便捷。
本文探讨的主要是web技术在app中的发展过程,不可能没有html和css,所以这里我们将集中讨论第一类的跨平台产品(web+native混合)。像reactnative虽然他所选择的第三方语言是js,但是他也可以选择其他语言,由于html和css已经不是其界面布局的方式,所以我认为其已经脱离了标准的web的技术,这里不再过多讨论。
此时国内html5也逐渐火热,大量的web程序员期待进入native app的开发领域。此时,面向web工程师的移动应用开发平台(web+native混合)开始出现,提供了一站式的跨平台app开发和管理服务,形成了一种新的web技术与native app相结合的模式。
hybridapp是一个以web技术为主的native app开发模式,开发者不需要具备任何的native技能,使用标准的web技术,通过调用平台的扩展api,就可以开发出独立的跨平台app。并且能保证app的功能、性能和体验。
hybridapp引擎需要在桥接扩展的基础上提供更多的功能,如:
1.mvc架构;
2.应用生命周期和统一事件管理;
3.优化交互响应、动画效果、数据缓存等;
4.web界面与native组件的混合渲染;
5.丰富的独立功能模块与聚合开放平台api;
6.对主流html编辑器进行扩展来支持app开发;
7.app安全机制及web代码全包加密;
这一时期出现了优秀跨平台app引擎,如apiclouddeepengine,通过deep engine在降低开发成本,提高开发效率的同时,可以开发出满足客户需要和用户运行体验的商用app。基于apicloud,客户也开发出了安装量过千万的主流优质应用。
五、基于superwebview的融合时代
进入2016年,虽然hybridapp已经被行业广泛认可,但是目前native还仍是主流的开发模式,大多数优质app都是原生的。如何能在这些native app中使用web技术?如何能在这些主流app中使用web技术完成部分功能的同时,又能保证app的性能和体验?如何能让native工程师和web工程师能更好的协作?
对于这些问题,我们不能只是嵌入一个系统webview,或引入一套桥接扩展机制,而是需要一个功能强大完整的超级webview,并且是为每一个应用根据实际配置动态生成专属的sdk。这种超级webview应具备的如下功能:
1.功能强大,具备mvc架构和性能优化;
2.聚合api,支持扩展模块和开放平台服务;
3.动态生成,根据配置,为每个应用动态生成专属的sdk;
4.云修复,实现应用内更新功能。
方便协作,保持web和native开发的独立性,降低融合成本,提高效率。
apicloud在2016年开年推出的这款超越性产品——superwebview,superwebview的出现必将加速web技术在native app中的融合,并且在优质的nativeapp,甚至超级app中发挥更大的作用。任何一款native app在集成superwebview之后,都可以大幅缩短迭代周期,支持功能的动态增加。由web技术实现部分的功能更新无需再反复提交appstore审核。用户也无需重新下载安装。
开发一款app,到底谁当主角?是native+web,还是web+native?那要看谁更适合当主角,谁当主角才能把戏演好。一部好戏不能只有一个主角,配合互补才能演出好戏。
nativeapp伴随着移动设备而生,web技术也是自出生就与native app互补和共存。apicloud从未想过“颠覆”,只是想提供一种实实在在的高效的app开发方式,让web技术和nativeapp能够更好的融合,发挥出各自应有的优势和价值。
超越源于融合!
作者:邹达