移动跨平台技术方案浅析

news2024/11/26 10:38:36

随着互联网产品逐渐兴起,越来越多产品体验从线下搬到了线上,尤其是移动互联网产品相关,所以很多企业就会更加重视降本增效,以最快的速度推出质量满意度高、用户体验性好的产品,那么就顺势催生了很多跨端跨平台方案。

最早的跨端跨平台解决方案要追溯到PhoneGap的时代,也叫作Hybird时代,代表作Cordova,同时期后来也有了基于AngularJS和Cordova的增强版Ionic,这些方案都是混合开发方案。

接着迎来了借助原生渲染的方案,先后出现的有ReactNative、Weex、uni-app等。之后出现了放弃原生渲染,自建渲染方案的自渲染技术Flutter。

一、移动跨平台的原理与特性

目前移动端跨平台开发中,大致归纳为以下几种情况:

react native、weex均使用JavaScript作为编程语言,目前JavaScript在跨平台开发中,可谓占据半壁江山,大有“一统天下”的趋势。

kotlin-native开始支持 iOS 和 Web 开发,(kotlin已经成为android的一级语言)也想尝试“一统天下”。

flutter是Google跨平台移动UI框架,Dart作为谷歌的亲儿子,毫无疑问Dart成为flutter的编程语言,如下图,作为巨头新生儿,在flutter官网也可以看出,flutter同样“心怀天下”。

二、移动跨平台三个时代

1、Web 容器时代

Web 时代的方案,主要采用的是原生应用内嵌浏览器控件 WebView的方式进行 HTML5 页面渲染,并定义 HTML5 与原生代码交互协议,将部分原生系统能力暴露给 HTML5,从而扩展 HTML5 的边界。

这类交互协议,就是我们通常说的 JS Bridge。 由于采用了 Web 开发技术,社区和资源非常丰富,开发效率也很高,社区和资源非常丰富,开发效率也很高。

但,一个完整 HTML5 页面的展示要经历浏览器控件的加载、解析和渲染三大过程,性能消耗要比原生开发增加 N 个数量级。

2、泛 Web 容器时代

Web容器方案具有生态繁荣、开发效率高、跨平台兼容性强等优势,但是它最大的问题在于承载着大量Web标准的Web容器过于笨重,以至于性能和体验与原生有较大差距。

泛Web容器时代的解决方案优化了Web容器时代的加载、解析和渲染这三大过程,把影响他们独立运行的Web标准进行了裁剪,以相对简单的方式支持了构建移动端页面必要的Web标准;

同时,这个时代的解决方案基本上完全放弃了浏览器控件渲染,而是由原生接管绘制。仅保持必要的基本控件渲染能力,从而使得渲染过程更加简化,也保证了良好的渲染性能。

3、自绘引擎时代

自带渲染引擎,客户端仅提供一块画布即可获得从业务逻辑到功能呈现的多端高度一致的渲染体验。Flutter,是为数不多的代表。Flutter 开辟了一种全新的思路,即从头到尾重写一套跨平台的 UI 框架,包括渲染逻辑,甚至是开发语言。

三、移动跨平台技术方案对比

现有的跨平台技术和解决方案大致可分为三类,分别是 Web 跨端、容器跨端、小程序跨端。

1、Web 跨端

Web 跨端比较好理解,因为 Web 与生俱来就有跨端的能力,因为只要有浏览器或 WebView,现在绝大多数端上(甚至包括封闭的小程序生态)都支持 Webview,所以只要开发网页然后投放到多个端即可轻松跨平台。

例如 Web App、PWA(Progressive Web Apps)、Hybrid App、PHA(Progress Hybrid App)。

2、容器跨端

另一种统一多端的思路是将 Native 定制成标准容器,让同一份代码跑在一个个标准容器中。

比较典型的代表是React Native 、Flutter、Weex,这类方案通过尽可能的取长补短,综合了 Web 生态和 Native 组件,让 JS 执行代码后用 Native 的组件进行渲染,以解决抛弃 Web 历史包袱的问题。

3、小程序跨端

小程序跨端也比较好理解,就是让同样代码的小程序能够运行在多个App中,例如开发完一个小程序除了让其运行在微信之外,还能运行在支付宝、百度等超级App,甚至是自己的 App中。

如果说小程序仍然是依靠 Web 技术运行的,那为什么还要单独去使用小程序呢?就像前面所说到的一样,Web 始终没法调用例如相机、蓝牙等这样的权限,并且用户使用体验会收到一定的影响。

小程序则不同,小程序具有强大的 Web 渲染引擎、提供丰富组件、支持本地缓存、避免 DOM 泄露等,并且其初衷是开放,例如微信、支付宝这样的超级 App 也都相继开放了小程序上架能力,小程序逐渐成为跨 App 的正规方式。

后期也甚至出现了例如 FinClip(www.finclip.com) 这样的小程序容器,可以让个人或企业自己的 App 具备小程序的运行能力,让其他 App 能够具有超级 App 一致的小程序跨端能力。

同时通过Flutter、Taro、 kbone等开发出来的小程序均可在FinClip当中运行。

优势:

  • 可以获取用户的相册、多媒体、蓝牙等基础权限
  • 具备类似 Native App 的体验度,使用较为流畅丝滑
  • 可以通过便捷化的上下架方式完成相关页面和业务的热更新

缺点:

  • 部分的插件会用到原生相关的技术
  • 大平台的框架标准不统一,会稍微有影响,但都大同小异,W3C也在做小程序的标准化工作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/48266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

并发编程九 线程池Executor框架

一 线程 线程是调度CPU资源的最小单位,线程模型分为KLT模型与ULT模型,JVM使用的KLT模型; Java线程与OS线程保持1:1的映射关系,也就是说有一个java线程也会在操作系统里有一个对应的线程。Java线程有多种生命状态 NEW,新建 RUNN…

一文带你深入了解Linux IIO 子系统

【推荐阅读】 一文剖析Linux内核中内存管理 分析linux启动内核源码 关于如何快速学好,学懂Linux内核。内含学习路线 工业场合里面也有大量的模拟量和数字量之间的转换,也就是我们常说的 ADC 和 DAC。而且随着手机、物联网、工业物联网和可穿戴设备的…

[第二十二篇]——Docker 安装 MongoDB

Docker 安装 MongoDB MongoDB 是一个免费的开源跨平台面向文档的 NoSQL 数据库程序。 1、查看可用的 MongoDB 版本 访问 MongoDB 镜像库地址: 。 可以通过 Sort by 查看其他版本的 MongoDB,默认是最新版本 mongo:latest。 你也可以在下拉列表中找到…

高校社团管理系统的设计与实现

摘要 随着互联网技术的高速发展,人们生活的各方面都受到互联网技术的影响。现在的社团成员可以通过互联网技术就能实现不在学校,在家也可以查看社团信息并能进行申请加入,简单、快捷的方便了社团成员的社交生活。同样的,在人们的工…

【Spring项目中的统一处理异常】

目录 1. 统一处理异常的机制 2. 关于统一处理异常的方法 3. 关于处理异常的方法的执行特点 1. 统一处理异常的机制 Spring MVC框架提供了统一处理异常的机制!表现为每种类型的异常只需要写一段(写一次)处理此异常的代码即可,项…

需求:针对同一个表格多次导入是否要做判断(此项目是用得若依)

每次上传表时,将上传的表名与以往上传的表名做对比,如果相同,则提示表已经有记录,是否上传相同表并结束此方法。 实现思路: 首先,每次上传表都要把表明记录一下,可以新建一个表(数…

天宇优配|离岸人民币狂拉逾千点!中概股暴涨!B站涨22%

当地时间周二,美股三大指数收盘涨跌纷歧。道指涨0.01%,标普500指数跌0.16%,纳指跌0.59%。 抢手中概股领涨,纳斯达克我国金龙指数大涨5.04%,哔哩哔哩(B站)涨超22%。大型科技股多数跌落&#xff0…

小程序中的confirm-type设置键盘的确认按钮

详情: confirm-type是很多小程序组件中的一种设置,用于改变输入键盘右下角的确认按钮。比如说,正常情况下,键盘上的默认提示可能是完成,但是你可以通过confirm-type将其设置为发送,搜索等,在特…

间隔不到一年开两店,温州鸿雁全屋智能经销商透露了他的生意经

作者 | 牧之 编辑 | 小沐 出品 | 智哪儿 zhinaer.cn编者按:间隔不到一年,连续开设了两家全屋智能体验店。这是发生在温州的渠道商故事。本期专访,「智哪儿」对话浙江林上智能科技有限公司总经理朱飞隆先生。他为何做智能家居?为何…

翻转单词序列、按之字形顺序打印二叉树、二叉搜索树的第k个节点

1、翻转单词序列 本题考点:子串划分,子串逆置 牛客链接 题目描述: 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻…

Python数据库编程之关系数据库API规范

Python关系数据库API规范 对于关系数据库的访问,Python社区已经制定出一个标准,称为Python Database API Specification。Mysql,Oracal等特定数据库模块遵从这一规范,而且可以添加更多特性。 高级数据库API定义了一组用于连接数…

三十六、Java 泛型

Java 泛型 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 假定我们有这…

火山引擎 DataLeap 的 Data Catalog 系统公有云实践

Data Catalog 通过汇总技术和业务元数据,解决大数据生产者组织梳理数据、数据消费者找数和理解数的业务场景。本篇内容源自于火山引擎大数据研发治理套件 DataLeap 中的 Data Catalog 功能模块的实践,主要介绍 Data Catalog 在公有云部署和发布中遇到挑战…

5. LSTM的C++实现

[C 基于Eigen库实现CRN前向推理] 第三部分:TransposedConv2d实现 (含dilation) 前言:(Eigen库使用记录)第一部分:WavFile.class (实现读取wav/pcm,实现STFT)第二部分:Conv2d实现第三部分:Tran…

你知道不同U盘在ARM+Linux下的读写速率吗?

优秀的产品离不开完善的测试,即使一个简单的USB接口也要确保稳定性及兼容性。不同的U盘在ARMLinux板卡下的兼容性、速率怎么样呢?本文将为大家提供测试参考数据及详细测试步骤! 1. 测试准备 主控选用最近发布的64位Cortex-A55核心板&#xff…

设计模式-day01

1,设计模式概述 1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。 1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫亚历山大(Christopher Alexand…

深入理解SR-IOV和IO虚拟化

一、背景 SR-IOV(Single Root I/O Virtualization)是由PCI-SIG组织定义的PCIe规范的扩展规范《Single Root I/O Virtualization and Sharing Specification》,目的是通过提供一种标准规范,为VM(虚拟机)提供…

springboot+vue职称评审管理系统

开发语言:Java 框架:Springbootssm(SpringSpringMVCMyBatis) JDK版本:JDK1.8 前端框架:vue.js 服务器:tomcat 数据库:mysql 数据库工具:Navicat11 开发软件:eclipse/idea都支持 Mave…

前端页面的性能测试

介绍 随着 Web 应用的空前发展,前端业务逐渐复杂,为了处理这些复杂业务,前后端分离,出现了专门应对这种分离架构的应用开发框架,比如 Angular,React,Vue 等,从而也导致 Web 应用的复…

高效率开发Web安全扫描器之路(一)

一、背景 经常看到一些SRC和CNVD上厉害的大佬提交了很多的漏洞,一直好奇它们怎么能挖到这么多漏洞,开始还以为它们不上班除了睡觉就挖漏洞,后来有机会认识了一些大佬,发现它们大部分漏洞其实是通过工具挖掘的,比如说下…