• Native 调用 JavaScript
    JavaScript暴露一个对象如JSBridge给window,让Native能直接访问。

那么App内加载H5的过程是什么样的呢?

App打开H5过程

打开H5分为4个阶段:

  1. 交互无反馈
  2. 打开页面 白屏
  3. 请求API,处于loading状态
  4. 出现数据,正常展现

这四步,对应的过程如上图所以,我们可以针对性的做性能优化。

优缺点分析

下面,我们进行H5的优缺点分析:

优点

  • 跨平台:只要有浏览器,任何平台都可以访问
  • 开发成本低:生态成熟,学习成本低,调试方便
  • 迭代速度快:无需审核,及时响应,用户可毫无感知使用最新版

缺点

  • 性能问题:在反应速度、流畅度、动画方面远不及原生
  • 功能问题:对摄像头、陀螺仪、麦克风等硬件支持较差

虽然H5目前还存在不足,但随着PWA、WebAssembly等技术的进步,相信H5在未来能够得到越来也好的发展。

小程序

2018年是微信小程序飞速发展的一年,19年,各大厂商快速跟进,已经有了很大的影响力。下面,我们以微信小程序为例,分析小程序的技术架构。

小程序跟H5一样,也是基于Webview实现。但它包含View视图层、App Service逻辑层两部分,分别独立运行在各自的WebView线程中。

View

可以理解为h5的页面,提供UI渲染。由WAWebview.js来提供底层的功能,具体如下:

  • 消息通信封装为WeixinJSBridge
  • 日志组件Reporter封装
  • wx api(UI相关)
  • 小程序组件实现和注册
  • VirtualDOM,Diff和Render UI实现
  • 页面事件触发

每个窗口都有一个独立的WebView进程,因此微信限制不能打开超过5个层级的页面来保障用户体验。

App Service

提供逻辑处理、数据请求、接口调用。由WAService.js来提供底层的功能,具体如下:

  • 日志组件Reporter封装
  • wx api
  • App,Page,getApp,getCurrentPages等全局方法
  • AMD模块规范的实现

运行环境:

  • iOS:JavaScriptCore
  • Andriod:X5内核,基于Mobile Chrome 53/57
  • DevTool:nwjs Chrome 内核

仅有一个WebView进程

View & App Service通信

视图层和逻辑层通过系统层的JSBridage进行通信,逻辑层把数据变化通知到视图层,触发视图层页面更新,视图层将触发的事件通知到逻辑层进行业务处理。

优缺点分析

优点

  • 预加载WebView,准备新页面渲染
  • View层和逻辑层分离,通过数据驱动,不直接操作DOM
  • 使用Virtual DOM,进行局部更新
  • 组件化开发

缺点

  • 仍使用WebView渲染,并非原生渲染,体验不佳
  • 不能运行在非微信环境内
  • 没有window、document对象,不能使用基于浏览器的JS库
  • 不能灵活操作 DOM,无法实现较为复杂的效果
  • 页面大小、打开页面数量都受到限制

既然WebView性能不佳,那有没有更好的方案呢?下面我们看看React Native。

React Native

RN的理念是在不同平台上编写基于React的代码,实现Learn once, write anywhere。

Virtual DOM在内存中,可以通过不同的渲染引擎生成不同平台下的UI,JS和Native之间通过Bridge通信

React Native 工作原理

在 React 框架中,JSX 源码通过 React 框架最终渲染到了浏览器的真实 DOM 中,而在 React Native 框架中,JSX 源码通过 React Native 框架编译后,与Native原生的UI组件进行映射,用原生代替DOM元素来渲染,在UI渲染上非常接近Native App。

React Native 与Native平台通信

  • React Native用JavaScriptCore作为JS的解析引擎,在Android上,需要应用自己附带JavaScriptCore,iOS上JavaScriptCore属于系统的一部分,不需要应用附带。
  • 用Bridge将JS和原生Native Code连接起来。Native和 JavaScript 两端都保存了一份配置表,里面标记了所有Native暴露给 JavaScript 的模块和方法。交互通过传递 ModuleId、MethodId 和 Arguments 进行。

优缺点分析

优点

  • 垮平台开发:相比原生的ios 和 android app各自维护一套业务逻辑大同小异的代码,React Native 只需要同一套javascript 代码就可以运行于ios 和 android 两个平台,在开发、测试和维护的成本上要低很多。
  • 快速编译:相比Xcode中原生代码需要较长时间的编译,React Native 采用热加载的即时编译方式,使得App UI的开发体验得到改善,几乎做到了和网页开发一样随时更改,随时可见的效果。
  • 快速发布:React Native 可以通过 JSBundle 即时更新 App。相比原来冗长的审核和上传过程,发布和测试新功能的效率大幅提高。
  • 渲染和布局更高效:React Native摆脱了WebView的交互和性能问题,同时可以直接套用网页开发中的css布局机制。脱了 autolayout 和 frame 布局中繁琐的数学计算,更加直接简便。

缺点

  • 动画性能差:React Native 在动画效率和性能的支持还存在一些问题,性能上不如原生Api。
  • 不能完全屏蔽原生平台:就目前的React Native 官方文档中可以发现仍有部分组件和API都区分了Android 和 IOS 版本,即便是共享组件,也会有平台独享的函数。也就是说仍不能真正实现严格意义上的“一套代码,多平台使用”。另外,因为仍对ios 和android的原生细节有所依赖,所以需要开发者若不了解原生平台,可能会遇到一些坑。
  • 生态不完善:缺乏很多基本控件,第三方开源质量良莠不齐

展望未来

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

一线互联网Android面试题含详解(初级到高级专题)

这些题目是今年群友去腾讯、百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。并且大多数都整理了答案,熟悉这些知识点会大大增加通过前两轮技术面试的几率

如果设置门槛,很多开发者朋友会因此错过这套高级架构资料,错过提升成为架构师的可能。这就失去了我们的初衷;让更多人都能通过高效高质量的学习,提升自己的技术和格局,升职加薪。

最后送给大家一句话,望共勉,永远不要放弃自己的梦想和追求;

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img
弃自己的梦想和追求;

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-tn9WdRPK-1712812523519)]

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐