移动开发跨平台技术

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011033906/article/details/89542851

极客时间版权所有: https://time.geekbang.org/column/article/88161


先看看这些链接吧:

1. 跨平台方案

1.1 基于 WebView 的 H5 跨平台方案

以浏览器为载体的 Web 技术就具备跨平台动态更新扩展性强等优点。随着移动设备性能的增强,Web 页面的性能也逐渐变得可以接受。客户端中出现越来越多的内嵌 Web 页面,很多应用也会把一些功能模块改为 Web 实现。

缺点

  • 启动白屏时间。WebView 是一个非常重量级的控件,无论是是 WebView 的初始化,还是整个渲染流程(Native 时间 + 网络时间 + 渲染时间)都非常耗时。这导致界面启动的时候会出现一段白屏时间,体验非常糟糕。
  • 响应流畅度。由于单线程、历史包袱等原因,页面的渲染和 JavaScript 的执行效率都不如原生。在一些重交互或者动画复杂的场景,H5 的性能还无法满足诉求。

所以在移动端 H5 主要应用在一些交互不太复杂的场景,一般来说即使帧率不如原生,但也基本符合要求。从我个人的感受来看,H5 当前最大的问题在于启动的白屏时间

1.2 React Native 和 Weex

基于 WebView 的 H5 跨平台方案,经过近乎疯狂的性能优化,看起来性能真的不错了。但是对于一些交互和动画复杂的场景(例如左右滑屏、手势),性能还是无法满足要求。

Facebook 在 2015 年开源了React Native,它抛弃了 WebView,利用 JavaScriptCore 来做桥接,将 JavaScript 调用转为 Native 调用。也就是说,React Native 最终会生成对应的自定义原生控件,走的是系统原生的渲染流程。

但是世上哪有十全十美的方案?React Native/Weex 方案为了能达到接近原生开发的性能和交互体验,必然要
Weex 方案为了能达到接近原生开发的性能和交互体验,必然要在跨平台和动态性上面做出了牺牲。

React Native 和 Weex 向上对接了前端生态,向下对接了原生渲染,看起来是非常完美的方案。但是前端和客户端,客户端中的 Android 和 iOS,它们的差异并不那么容易抹平,强行融合就会遇到各种各样的坑。

既然 React Native 和 Weex 在跨平台上面做了牺牲,那它的性能和交互是不是能直接对齐 Native 开发呢?非常遗憾, 目前它们的性能我觉得主要还有两个瓶颈。

  • JS 的执行时间。React Native 和 Weex, 虽然它每年都在进步,但是 JS 是解释性的动态语言,它的执行效率相比 AOT 编译后的 Java,性能依然会在几倍以上的差距距。
  • 跨语言的通信成本。既然要对接前端和原生两个生态,就无法避免 JS -> C++ -> Java/Objective-C 之间频繁的通信和转换,所以这里面会涉及各种序列化,对性能的影响比较大。

虽然相比 H5 方案在性能方面有了很大的提升,但是 React Native 和 Weex 也要面对启动时间慢、
帧率不如原生的性能问题。它属于一种比较中庸的方案,当然也会有自己的应用场景。例如一些二级页面(例如淘宝的分会场),它们的业务也比较重要,但是交互不会特别复杂,同时希望保持一定的动态化能力

1.3 小程序

每一个应用都有成为超级 App 的梦想,各个大厂纷纷推出自己的小程序框架:微信、厂商、支付宝、今日头条、百度、淘宝、Google Play,小程序这个战场已然是“七国大乱战”。

但是小程序并不属于一种跨平台开发方案,大家更看重的是它的渠道优势,考虑如何通过微信、支付宝这些全民 App 获得更多的流量和用户。从技术上看,小程序的框架技术也是开放的,我们可以采用 H5 方案,也可以采用 React Native 和 Weex,甚至是 Flutter。

2. 跨平台开发的场景

2.1 部分业务

某个业务或者页面的跨平台共享,有的时候我们还希望可以做到跨应用。例如“全民答题”的时候,可以看到这个功能可以运行在头条系的各个应用中。一个公司共用同一套跨平台方案有非常重大的意义,业务可以在不同的应用中尝试。

2.2 核心功能。

C++ 才是生命力最顽强的跨平台方案,大公司也将越来越多的核心模块往底层迁移,例如网络库、数据上报、加解密、音视频等。

2.3 跨平台开发对比

H5 的跨平台方案只要投入不太高的开发成本,就能开发出性能、功能还不错的应用。但是如果想做到极致优化,很容易发现开发者可控的东西实在比较少,性能和功能都依赖浏览器的支持。

这个时候如果想走得更远,我们不仅需要了解浏览器的内部机制,可能还需要具备定制、修改浏览器内核的能力,这也是阿里、腾讯、头条和百度都要组建内核团队的原因。

原生开发则相反,刚开始要投入很高的开发成本,但是一旦开始有产出之后,开发者能够有更大的发
挥空间,而 React Native 和 Weex 方案更是希望打造兼顾跨平台、开发成本以及性能的全方位解决方案。

3. 总结

现在好像有个观点说“Android 开发没人要”,大家都想转去做大前端开发,是不是真的是这样呢?事实上,无论我们使用哪一种跨平台方案,它们最终都要运行在 Android 平台上。崩溃、内存、卡顿、耗电这些问题依然存在,而且可能会更加复杂。而且从 H5 极致体验优化的例子来看,很多优化是需要深入研究平台特性和系统底层机制,我们学到的底层和系统相关的知识依然很重要。

对开发者来说,唯一不变的就是学习能力。掌握了学习能力和钻研的精神,就能够应对这些趋势变化。无论移动开发未来如何变化,哪怕有一天 AI 真的能够自动写代码,具备应变能力的人也丝毫不会惧怕的。

猜你喜欢

转载自blog.csdn.net/u011033906/article/details/89542851