HhybridApp开发模式,你了解多少?

news2024/11/25 22:40:44

Hhybrid App顾名思义就是原生 App 与 Web App 的结合。它的壳是原生 App,但是里面放的是网页。 可以理解成,混合 App 里面隐藏了一个浏览器,用户看到的实际上是这个隐藏浏览器渲染出来的网页。

随着 Web 技术和移动设备的快速发展,Hybrid 技术已经成为一种最主流最常见的方案。一套好的 Hybrid架构方案 能让 App 既能拥有极致的体验和性能,同时也能拥有灵活的开发模式、跨平台能力以及热更新机制。


首先我们先看看目前市面上常见的一些APP开发技术架构

Native App 开发模式

Native App,原生APP,使用原生(即Android或iOS)开发的APP。应用的性能好是毋容置疑的,可以使用系统的所有硬件和软件 API,比如 GPS、摄像头、麦克风、加速计、通知推送等等,能充分发挥系统的潜力。

但是也存在些许弊端:

1、需要建立不同的开发团队,大公司一般都有 iOS 和安卓两个开发团队。如果出现第三个平台(例如Windows Phone或者华为鸿蒙 OS),可能就要组建第三个团队,成本就更高。

2、原生 App 使用底层操作系统的语言,都是很重的编译型语言,开发和调试成本相对较高,时间周期长。

3、原生 App 必须下载安装才能使用,只要升级版本,就必须重新下载安装。用户往往不愿意更新版本,厂商被迫不得不长期支持很久以前的旧版本。

4、无法跨平台:Android和iOS都需要开发各自平台的版本——开发成本高,还需要经过应用商店审核,常常会导致两端发版不一致

相信以上问题对于移动开发者都有共鸣

Web App 开发模式

相信HTML5技术的兴起给Web App注入了新的生机。

Web App,一般指的是基于 Web 的应用,基于浏览器运行无需下载安装,基本上可以说是触屏版的网页应用。这类应用基本上是一个网页或一系列网页,旨在在移动屏幕上工作。

Web 网站一般分为两种:

MPA(Multi-page Application)

SPA(Single-page Application)

一般的 Web App 是指 SPA 形式开发的网站。

优点:

开发和维护成本低,可以跨平台,调试方便;

前端人员开发的代码,可应用于各大主流浏览器(特殊情况可以代码进行下兼容),没有新的学习成本,而且可以直接在浏览器中调试。

更新最为快速;

由于web app资源是直接部署在服务器端的,所以只需替换服务器端文件,用户访问是就已经更新了(当然需要解决一些缓存问题)。

缺点:

性能低,用户体验差;

由于是直接通过的浏览器访问,所以无法使用原生的API,操作体验不好。

依赖于网络,页面访问速度慢,耗费流量;

Web App每次访问都必须依赖网络,从服务端加载资源,当网速慢时访问速度很不理想,特别是在移动端,对网站性能优化要求比较高。

功能受限,大量功能无法实现;

只能使用 HTML5 的一些特殊 API ,无法调用原生 API ,所以很多功能存在无法实现情况。

临时性入口,用户留存率低;

这既是它的优点,也是缺点,优点是无需安装,确定是用完后有时候很难再找到,或者说很难专门为某个web app留存一个入口,导致用户很难再次使用。

Hybrid App 开发模式

Hhybrid App顾名思义就是原生 App 与 Web App 的结合。它的壳是原生 App,但是里面放的是网页。 可以理解成,混合 App 里面隐藏了一个浏览器,用户看到的实际上是这个隐藏浏览器渲染出来的网页。

混合 App 的原生外壳称为"容器",内部隐藏的浏览器,通常使用系统提供的网页渲染控件(即 WebView 控件),也可以自己内置一个浏览器内核。结构上,混合 App 从上到下分成三层:HTML5 网页层、网页引擎层(本质上是一个隔离的浏览器实例)、容器层。

混合 App 同时具有原生 App 和 Web App的优点,又可以避免它们的一些缺点。具体来说,可以总结为三点。

(1)跨平台

Web 技术是跨平台的,开发者只写一次页面,就能支持多个平台。也就是说,混合 App 只需要一个团队就够了,开发成本较低。

(2)灵活性

混合 App 的灵活性大,很容易集成多种功能。一方面,混合 App 很容易加载外部的 H5 页面,实现 App 的插件结构;另一方面,Web 页面可以方便地调用外部的 Web 服务。

(3)开发方便

Web 页面的调试和构建,远比原生控件简单省时。页面的更新也容易,只要在服务器上发布新版本,触发容器内更新就可以了。另外,Web 开发人员也比较容易招聘,传统的前端程序员可以承担开发任务。

现在比较流行的混合方案主要有三种,主要是在UI渲染机制上的不同:

  1. 基于 WebView UI 的基础方案,市面上大部分主流 App 都有采用,例如微信JS-SDK、Cordova,通过 JSBridge 完成 H5 与 Native 的双向通讯,从而赋予H5一定程度的原生能力。
  2. 基于 Native UI 的方案,例如 React-Native、Weex。在赋予 H5 原生API能力的基础上,进一步通过 JSBridge 将js解析成的虚拟节点树(Virtual DOM)传递到 Native 并使用原生渲染。

在此特别强调一下第三种方案——基于小程序方案,也是通过更加定制化的 JSBridge,并使用双 WebView 双线程的模式隔离了JS逻辑与UI渲染,形成了特殊的开发模式,加强了 H5 与 Native 混合程度,提高了页面性能及开发体验。

小程序在JS-SDK的基础上,一方面进一步开放和拓展原生的能力给到Web前端调用,另一方面,页面渲染(Webview Render)的UI层和逻辑层,使用了两个独立的线程。如下图所示:

 

小程序运行时本质上是一个处理Web页面渲染、数据逻辑交互的虚拟机,这个虚拟机提供了丰富的原生能力供小程序调用(API、组件、AI能力等),极大的拓展了Web应用的能力边界,尤其是在诸如滚动视图(scrool-view)、导航(navigator)、图片预览(cover-image)等组件的提供,使得前端开发人员在使用现有的web前端技术,就可以开发出接近原生体验的应用。

技术选型

任何技术方案的选型,其实都应该基于使用场景和现有条件。基于公司现有情况的几点考虑,在方案一上进一步优化,更加适合我们的需求。

  1. 业务功能可以快速迭代、灵活开发并且支持线上热更新的机制。
  2. 公司业务上,并没有非常复杂的UI渲染需求,而且公司已经有一套完善的前端框架并且已经非常成熟,因此我们并不强需类似 RN 这样的方案。
  3. 产品的核心能力是需要调用系统权限,因此单纯的 H5技术能做的事非常有限,不能满足需求,需要通过 Hybrid 技术来强化,例如「Native+小程序」技术框架

那当你获得这么一个「小程序运行时引擎」,你会如何改造你的App?

以往业务部门要发布一些新的功能的时候,用户必须要主动更新App,而且任何一个局部功能的变化升级需要去重新去应用市场再操作一次,成本很高。由于并不是所有的用户都去更新,造成IT团队需要花费大力气去维护多个不同的版本。这种方式造成用巨大的资源浪费和用户体验的不便利。

如果用小程序,这个问题会迎刃而解。首先,小程序可以独立的去更新,App作为了一个载体,很长的一段时间内,不需要被频繁更新。其次,每个小程序可以按照业务具体需要去独立发布各自的版本,不同的小程序之间的更新升级彼此独立、互不干扰。最后,由于小程序运行的沙箱机制,保证了不论是哪个小程序出现Bug、崩溃等情况,不会拖累应用本身,即便出现严重问题,也不过就是把它下线即可。


目前市面上也提供了小程序的通用解决方案,今天为大家介绍一下——FinClip。它的最大特点,就是能够让任何 App 运行小程序。

只需要在你的 App 里面,引入它的 SDK,就能加载运行外部小程序了。除了 SDK,它还提供一个后台管理系统,统一管理小程序的上架和下架,以及收集和分析小程序数据。

 

而且FinClip完全遵循微信小程序的开发标准与规范。也就是说,现有的微信小程序可以不改一行代码,直接放进你的 App 里面,运行效果保持不变,不必额外二次开发和改造,大大节省了人力成本。

不仅如此,FinClip 还支持手机以外的多种终端,包括 Linux、Windows、MacOS、麒麟等操作系统。这意味着,PC 端、车载设备、智能电视都能使用小程序了,实现了小程序的“一次开发,到处运行”,同时触达众多流量平台,而不仅仅局限于微信生态。

 

FinClip 还提供小程序 IDE 开发工具,界面与微信小程序的开发工具类似,自带调试和真机预览,简单易上手。你可以在这个 IDE 里面,对现有项目进行二次开发,扩展功能和接口,或者从零开始写出一个小程序。

任何事物的发展都具有周期性,显然小程序的这波红利已经到来, 今天的创新可能就是明天的标配。当务之急,尽早上船拿到“船票”。

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

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

相关文章

长沙打造“全球研发中心城市”,智能网联产业如何交卷?

作者 | 魏启扬 来源 | 洞见新研社 知乎上有一个浏览超百万的热门问题——“大家怎么看待长沙这个城市?” 答主“星球研究所”的回答获得了高赞,“这是一个天性如火的城市”。 网红城市的外衣下,从湖南卫视的综艺节目,到网红美…

2023年牛客暑假多校-1 - J.Roulette题解

传送门(lduoj) 题目描述 Walk Alone is playing roulette, a kind of gambling. For simplification, we assume its rules and steps as follows: The whole gambling process composes of many turns.In the i-th turn:Walk Alone can choose an i…

ROS:nodelet

目录 一、前言二、概念三、作用四、使用演示4.1案例简介4.2nodelet 基本使用语法4.3内置案例调用 五、nodelet实现5.1需求5.2流程5.3准备5.4创建插件类并注册插件5.5构建插件库5.6使插件可用于ROS工具链5.6.1配置xml5.6.2导出插件 5.7执行 一、前言 ROS通信是基于Node(节点)的…

[RK3568] AMP架构

Rockchip 平台异构多系统 AMP (非对称多核架构)的开发软件包,支持 Linux(Kernel) 、 Standalone(Hal)、 RTOS(RT-Thread) 组合 AMP 构建形式。 Standalone(Hal) HAL:Hardware Abstraction Layer,硬件抽象层。 硬件抽…

抖音新号起号正确方法,如何操作?

抖音上有着越来越多的卖家注册账号,但刚开始在注册账号后,新号是没有什么流量的,所以想要获得更多的流量的话,在刚开始进行起号的时候就需要按照以下方式进行,下面就一起了解清楚。 第一个找对标内容,抖音…

Hadoop集群启动常见错误

错误一 : 配置文件错误 解决方案:检查配置文件,修改错误。重新分发(同步) 常见错误二 : 重复格式化 DataNode NameNode 在格式化时如果发现下面的提示说明重复格式化了 datanode和namenode的集群id…

KUKA机械臂的导纳控制

KUKA机械臂的导纳控制 在近期的实验中,需要根据传感器的给出的实时位置信息进行导纳控制,并实时改变导纳控制的参数。由于KUKA自带的实时导纳控制模型无法实时修改参数,因此尝试了自己实现导纳控制。网上这方面的资料比较少,整理…

Java阶段五Day09

Java阶段五Day09 文章目录 Java阶段五Day09网关Gateway跨域的问题熔断限流组件sentinel微服务场景熔断降级限流降级 sentinel学习案例sentinel介绍重要的核心概念准备一个测试的工程定义资源定义规则sentinel运行原理本地文件定义规则整合nacos实现规则的远程读取规则的内容详解…

【C++初阶】构造函数和析构函数

文章目录 一、类的六个默认成员函数二、构造函数三、析构函数 一、类的六个默认成员函数 📖默认成员函数 用户没有显式实现,编译器会自动生成的成员函数,称为默认成员函数。 构造函数:完成对象的初始化工作。析构函数&#xff…

在dell server的UEFI mode下指定ISO安装Ubuntu

1.重启系统 在蓝色界面出现提示后选择F2进入 然后保存设置即可

Linux系统部署Nginx详细教程(图文讲解)

前言:本篇博客记录了我是如何使用Linux系统一步一步部署Nginx的完整过程,也是我学习之路上的一个笔记总结,每一行代码都进行了严格的测试,特此做一个技术分享! 目录 一、安装依赖 二、安装Nginx 三、配置Nginx 四、…

【Docker】Docker基本管理命令

目录 一、Docker概述1.1容器化受欢迎的原因1.2Docker核心概念 二、安装 Docker2.1环境准备 三、Doker镜像操作镜像操作选项 四 、Docker 容器操作容器操作选项 一、Docker概述 Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 Docker是…

Pycharm远程服务器上运行程序报错:Can‘t get remote credentials for deployment server

一、问题描述: 二、解决方法: 1.依次选择 文件 -> 设置 -> 项目 -> Python 解释器,出现如下界面: 2. 点击python 解释器右侧的小齿轮,选择全部显示: 3. 在弹出的窗口中发现存在多个连接到同一个服务器的解释…

亚马逊卖家该如何调整心态帮助自己“放松”?

作为亚马逊卖家,具备良好的心理承受能力是非常重要的。由于竞争激烈、市场变化快速等因素,卖家可能会面临各种压力和挑战。所以对于卖家而言,应该怎样调整自己的心态呢? 接受现实: 亚马逊市场是一个竞争激烈的环境&am…

python3GUI--仿win10任务管理器By:PyQt5(附UI源码)

文章目录 一.前言二.展示1.主界面1.进程2.性能1.CPU2.内存 3.简略信息4.新建任务 三.设计思路1.UI设计1.主界面1.进程2.性能3.详细信息4.新建任务5.图表信息组件 2.代码整体设计1.项目设计心得2.项目设计其他心得 3.其他心得 四.源…

【交点】直线与多边形相交显示

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 python 求直线与多边形交点并显示 1. 正文 1.1 步骤 import matplotlib.pyplot as plt from shapely.geometry import LineString, Polygon导入所需的…

Spring整合Junit

Spring整合Junit 在之前文章中Spring的测试方法几乎都能够看到如下的代码: ApplicationContext context new ClassPathXmlApplicationContext("xxx.xml"); XXX xxx context.getBean(XXX.class);它的作用是创建Spring容器,最终获取到对象&…

初识vue3/setup/ ref()/ computed/watch/生命周期/父传子

创建项目先不着急学 main.js变了 新加setup reactive ref() computed watch 生命周期 父传子 子传父 ref/模板引用 暴露子组件属性 跨层传数据 defineOptions

高效又安全的企业大数据传输解决方案推荐

在当前的商业领域中,企业大数据传输是一个重要而复杂的问题。随着企业规模和数据量的扩大,如何安全可靠、高效快速地传输大数据成为了许多企业需要面对的挑战。本文将介绍几种值得考虑的企业大数据传输解决方案,以帮助企业有效应对这一挑战。…

Unity基础 弹簧关节SpringJoint

弹簧关节 在游戏开发中,物体之间的交互性是非常重要的。为了模拟现实世界中的弹性特性,Unity提供了弹簧关节(Spring Joint)组件。通过弹簧关节,我们可以轻松实现物体之间的弹性交互效果。本文将详细介绍Unity中的弹簧…