首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Native和H5分久必合,Weex会带来移动端的巨变吗?

Native和H5分久必合,Weex会带来移动端的巨变吗?

作者头像
博文视点Broadview
发布2020-06-11 15:47:19
1.8K0
发布2020-06-11 15:47:19
举报

Weex是一个移动端的动态化框架,它允许开发者用轻巧的 HTML/JS/CSS 开发多个端的 NativeApp。用 Weex只需写一份代码,便可运行在Android、iOS以及H5中,并且在 Android 和iOS上以Native UI的形式呈现,为用户提供更好的用户体验。

2015年双11前夕,双11大促会场急需提升H5页面的体验,在多个方案调研无果之后,南天决定研发一套动态化框架。Weex这个名词来自于南天和勾股沟通中的一句话“you give us a few weeks,I give you a weex”,它很生动地反映了Weex诞生之初的环境。2015年双11主会场页面使用了Weex技术。

Weex平台团队2015年年底开始接手Weex整体开发工作。在2016年双11会场中,Weex覆盖了99.6%(1747/1754)的会场页面,页面的打开速度、滚动的流畅性都保证了较好的用户体验。

那么,阿里2016年双11移动端动态框架为什么会选择Weex,而不是Native或H5?这种技术演进带给用户哪些不一样的感受呢?

  • Native和H5的分久必合

在移动端崛起的大背景下,移动端的开发技术又是如何演进的呢?

• 2007年,Apple 发布了 iPhone 手机和iOS 操作系统,是轰动一时的新闻。当时人们还在调侃 iPhone 是个大号的 iPod,由此也能看出一部分人并不觉得 iPhone 会改变什么。

• 2008 年,Google 发布了 Android 手机(G1),尽管不再轰动,但Android操作系统是开源的,使得更多的手机厂商可以在自家的手机上安装Android,这对移动设备的普及至关重要。

• 2009 年,硬件条件远不如今天,当时的网络慢、CPU 慢、内存小、硬盘小、屏幕小,为了充分利用硬件能力及OS底层能力,iOS和Android 都发布了自己的 SDK,开发者可以在 SDK 基础上开发出高性能、富体验的Native App。刚诞生的移动端还没聚集到足够多的开发者,这个阶段的Native App中有不少H5页面 1 ,移动浏览器也还被较多使用。刚诞生的iOS和Android肯定没想到几年后基于它们的Native App就无处不在了。参考当年主流机型和环境,包括iPhone 1/G1和2016年iPhone 7 /Nexus 7等设备,得出一组典型数据,如下表。

硬件能力典型值对比

• 2009 年,有个重要的名词出现了:Mobile First。它传达了这样的想法:在移动端崛起的大环境下,在移动端人机交互体验(如触屏)和物理条件(如屏幕尺寸)的巨变下,应该考虑将业务核心关注点(因为屏幕小)优先(因为移动端崛起)在移动端上实现。后续几年移动端规模的指数级增长也让 Mobile First 更加深入人心。这个阶段 H5 呈现上升趋势,Native 也在逐步走向繁荣。下图中,以中国互联网中心(CNNIC)《中国移动互联网发展状况报告》2013年4月份的数据为例,2008年中国移动互联网网名增速达133%。事实上,这个发展势头,国内外均是如此。

CNNIC:中国手机网民规模及增长率

• 2011年,Adobe在移动端放弃继续维护Flash,转向拥抱HTML5,看起来H5形式一片大好。

• 2012年,H5和Native成长路径上的拐点出现了。Facebook宣称:“Facebook 的应用完全依赖 HTML5 是最大的错误,导致浪费了两年宝贵的时间,将来要改为原生应用。”且不论对错,大致在这个时间点之后, Native开发逐渐统治移动端,而H5在业务中的应用逐步被边缘化。

• 2014年,经过数年的快速增长后,Native的增长逐步放缓,一份调查显示,约2/3美国用户每月不下载任何新应用;同时国内一些大型App包体积接近上限,新功能、新业务难以扩充。

• 2015年,也称为动态化框架元年,从年初的NativeScript、ReactNative 到年底阿里的Weex,它们都使用HTML/JS/CSS写页面,渲染出Native UI,在开发效率和用户体验上吸收了H5和Native各自的优点。

  • 动态化框架

谈到了动态化框架,技术演进到最后为什么不是H5或者Native呢?Native开发的诸多亮点中,流畅体验和系统调用是最多被提及的,然而,实际上是痛并快乐着。

• 流畅体验体现在页面滚动/动画的流畅性,背后是更好的内存管理和更接近原生的性能。但是,这同时又是Web的痛点:资源首次下载时间长、长页面内存溢出,以及滚动性能、动画性能、传统Web性能(如JS执行效率)低。

• Native 有丰富的系统调用能力,而Web的痛点在于:W3C 标准太慢、设备访问能力有限以及API 兼容性问题较严重,如 Geolocation在 Android Webview 中可用性很差。

H5开发同样有诸多亮点,其中最耀眼的当属发布能力和规模协作,但是问题同样不少,主要体现在:

• Native App 商店审核周期长(尤指 iOS)。应用更新周期长,iOS 稍快大概能达到一周更新率 60%~80%,Android 同样的更新率要2周甚至更长。而H5在合适的缓存机制下一分钟可达到 99%以上。

• 浏览器内核Webkit提供了相对一致的底层运行环境,HTML/JS/CSS控制页面的结构/行为/样式,URI连接不同的页面,有了这些基础设施,大规模的业务复用和人与人的分工协作变得相对轻松。

由此,我们可以看到,Native和H5开发各有其痛点,如果能开发一套新的技术克服这些弊端,同时又能吸收Native和H5的优势,一定会带来很多惊喜。这就是动态化框架诞生的技术背景。

  • Weex

Weex是一个移动端动态化框架,它能够吸收H5和Native的优势,同时保证易用性。Weex利用Native的优势解决了H5的痛点,具体如下:

• H5对内存的控制不足,尤其是长列表内存,这会导致过长的H5页面占用过多的内存,容易导致App崩溃。

• H5长列表流畅性不够。一个是滚动时的流畅性,技术指标上表现为帧率;另一个是所谓的“黏手感”差,也就是屏幕响应手指操作的变化速度较慢。

• H5大区块的动画流畅性差,典型如Banner和侧边栏等组件。

• H5 WebView滚动过程中懒加载图片会导致“白屏”。

Weex利用H5的优势解决了Native的痛点:

• 解决了iOS、Android等平台需要开发多套功能重复代码的问题。

• 解决了Native无法做到即时发布及响应市场变化周期较长的挑战。

• 提升了大规模团队在复杂集成系统平台上开发App的效率。

以2016年双11主会场(可用淘宝扫描下图二维码观看对比视频)为例,H5的问题非常明显:

• H5滚动过程中图片加载缓慢,滚动过程中系统阻止了JS执行,导致图片懒加载被延迟。

• H5“黏手感”较差,响应延迟。

2016双11主会场录屏,视频中左起分别为H5、Weex iOS、Weex Android

再看一下Weex页面加载的效果(扫描下方二维码观看)。

主会场启动, WiFi

主会场启动,4G

主会场启动,3G

无论WiFi、4G、3G下都能确保秒开(下载+首屏渲染<1s),即使在2G这种慢速网络下也能在4s内看到页面。

下面简单看下Weex的工作原理,将 Weex 架构自上而下地展开如下。

Weex架构

(1) 业务层:Weex 双11主战场是手机淘宝和手机天猫,此外还有大量客户端已经启用或接入了Weex。

(2) 中间件层:包括为 Weex 页面提供发布(斑马、AWP)、预加载(AWP)、客户端接入支持(AliWeex)、组件库(SUI)、游戏引擎、图表库等模块。其中斑马、AWP、预加载都直接参与了双11。

(3) 工具层。

· DevTools:界面和交互复用了Webkit Devtools,支持elements、network、断点、console等。

· Playground:方便开发者调试Weex页面,同时也是Weex example 的聚集地。

· Cli:Weex 命令行工具集。

目前仍在建设更多的工具,如 weex-pack 支持一键打包成 App。

(4) DSL(领域语言)

· JS Framework,Weex 最初的 DSL 基于 Vue.js 1.0 语法子集;目前社区中在推进基于 Vue.js 2.0 的版本。

· Rax,基于 reactjs 语法的 Weex DSL(有正式开源计划)。

(5) 渲染引擎:从架构设计上,Android/iOS/H5渲染引擎是相互独立、地位平等的渲染端,这是保持三端一致的基础,当然在协议实现层面需要更多的设计、质量保证。

将架构中的DSL和Engine独立出来看。

Weex工作原理

(1) 写好的Weex文件(.we文件)通过转换工具转换为JS Bundle,再部署到服务器上。

(2) 客户端上的JS Framework负责加载JS Bundle并与Native通信。

(3) iOS使用系统的JSCore运行JS,Android使用V8 运行JS。

(4) JS和Native通过JSCore/V8暴露的通信接口来通信。

(5) Weex从架构上支持了iOS、Android、H5渲染引擎,做到了真正意义上的三端一致。

  • 阿里双11会场的移动技术演进

始于2009年的阿里双11见证并参与了移动技术变迁的全过程。阿里双11会场所使用的技术大致分为以下阶段:

(1) 2009—2012年,完全使用H5,移动端规模较小。

(2) 2013—2014年,完全使用H5,移动端规模爆发式增长,H5的用户体验问题也被放大。但是会场的高时效性决定了会场很难通过Native来实现,每年双11都会到11月10日晚上才完全停止页面的发布。如果通过Native发布就很困难了。 这就迫切需要一套既有高性能又有高发布效率的方案。

(3) 2015年,大部分页面使用H5,主会场使用了Weex的最初版本,

在单个页面上实现了高性能和高发布效率。

(4) 2016年,Weex不只在单个页面上做到了预期的目标,同时覆盖了99.6%(1747/1754)的2016阿里双11会场,会场页面无论是打开的速度、滚动的流畅性都保证了较好的用户体验。

Weex不只是服务于大促会场的技术方案,它还可以被运用于更广泛的业务领域。因为无论从设计理念还是技术架构上,Weex都没有对此做强制的约束。

  • Weex的未来

今天的Weex似乎走在和AJAX相似的一条道路上。Weex出现之前,大部分移动端开发是使用H5或Native技术的,各有优点,但缺点也非常明显。伴随着2016年阿里双11中Weex的大规模应用和良好的用户体验,Weex有机会成为下一个AJAX吗?或者说Weex会带来移动端上的一次巨变吗?让我们拭目以待。

本文选自《尽在双11——阿里巴巴技术演进与超越》一书

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 博文视点Broadview 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档