首页 > 其他分享 >热更新方案探索:如何有效技术选型

热更新方案探索:如何有效技术选型

时间:2023-11-13 14:34:55浏览次数:28  
标签:探索 App 程序 更新 选型 冷启动 替换 加载

热更新是一种App的更新方式。简单来说,就是在用户下载安装App之后,打开App时对代码和图片等资源进行的即时更新。热更新是App代码逻辑自控发起,无需用户进行手动下载,可以做到用户无感。另外热更新可以做到增量更新,仅需下载更新有修改的代码和资源,可以有效减少更新的时间和数据流量消耗。此外热更新也很灵活,可以随时发起,适合App功能快速迭代。

热更新的技术价值

站在 App 开发者角度的“热”是指在不发版的情况来实现更新,修复 BUG 和发布功能,让开发者得以绕开应用商店的审核机制,避免长时间的审核等待以及多次被拒造成的成本。

在热更新出现之前,通过反射注解、反射调用和反射注入等方式已经可以实现类的动态加载了。热更新的实质就是替换,需要替换运行时新的类和资源文件的加载,就可以认为是热操作了。

热更新的技术选型

其实各家互联网巨头都有自己的热更新技术,目前比较有代表性的技术可以分为两类:类加载、底层替换。

1、类加载

只需要把 Bug 修复涉及到的类文件插入到数组的最前面去,就可以达到热修复的效果。

类加载方案的时效性差 ,需要重新冷启动才能见效,但修复范国广,限制少。代表的有Qzone 超级补丁、微信 Tinker

2、底层替换

底层替换是一种native方案,其操作是在Native修改Filed指针的方式,实现方法的替换,达到即时生效无需重启,对应用无性能消耗的目的。

底层替换方案限制颇多 ,可以不用重启生效,加载经快,立即见效。代表的有阿里系的 AndFix 、Sophix

如果进一步对各个热更新方案进行对比,可以用这张图进行总结:

对比角度

Andfix

阿里 Hattix

Sophix

Tinke

方法替换

支持

支持

支持

--

方法增滅

不支持

不支持

冷启动支持

--

反射调用

支持静态方案

支持静态方案

冷启动支持

--

修复方式

即时生效

即时生效

自动判断

冷启动

安全机制

加密传输及签名校验

加密传输及签名校验

加密传输及签名校验

性能损耗

几乎无损耗

几乎无损耗

冷启劲有低损耗

较高

补丁大小

热更新就是一种热操作,它是一种改变app运行行为的技术,其本质就是利用hook操作进行替换,在代码上是一种侵入性的操作。由于在安全性的考虑,Google 和苹果是不支持热更新的,在中国特殊国情下才出现了这种黑科技。

是否存在更加简洁靠谱的热更新机制呢?

答案是有的。

一种轻量的热更新机制

也是因为国内互联网企业和开发者的持续内卷,小程序形态的业务承载方式兴起,至从2017年微信上线开放小程序以来,支付宝、百度、字节等头部厂商都投入到小程序的研发体系中,目前小程序已经受到市场的普遍认可,优质的操作体验也改变了用户原有第一时间下载App使用商家服务的习惯。

但是大家有想过吗,小程序也是一种热更新机制,对于微信、支付宝等平台来讲,可以通过管理后台上下架的形式对小程序承载的业务进行管理,并且这种方式对于代码是完全没有入侵的。相对于以上集中热更新方式来讲优势也比较明显,但是这种方式也是有门槛的。

不是每家公司都有像微信、支付宝等大厂商研发技术和成本让自己的 App 具备小程序的运行能力,背后需要掌握复杂的编译及渲染技术。

目前市场上有一些比较成熟的小程序容器技术是可以帮助任一App实现这种功能,例如 FinClip 是通过 SDK 集成的方式让自有的 App 具备小程序运行能力。说的更浅显易懂的话,这就是一种「Native + 小程序」的混合开发模式,借助这种开发模式可以让小程序运行在自有 App 中,将臃肿的 App 功能打散,功能模块互相解耦实现模块化开发,各业务模块间互不影响,通过管理后台即能实现实时动态更新与发布。

推测大家现在想到的一个点:H5 也能实现,为啥还要去用小程序容器。

很简单,H5 白屏卡顿等问题频发,对用户体验造成极大影响,对于追求用户体验的 App 来讲这点就很排斥。实话现在使用各家银行 App 内嵌的 H5 页面我是真的很烦,加载慢还各种卡。

小程序类似原生的使用体验、各种权限的获取、保存缓存等正好能够解决之前 H5 遗留的这些问题。

热更新还有很多值得讨论的,你的看法和观点是什么?

标签:探索,App,程序,更新,选型,冷启动,替换,加载
From: https://www.cnblogs.com/Xxx1m/p/17829014.html

相关文章

  • 探索循环语句:for、while循环和else的搭配使用
    循环语句是编程中的重要组成部分,它们使程序能够按照特定的模式执行重复任务。在Python中,我们主要有两种类型的循环:for循环和while循环。这两种循环语句都有其各自的特点和用途,而在这篇文章中,我们将深入探讨它们以及它们如何与else语句搭配使用。For循环for循环主要用于遍历序列(如列......
  • datetime.date.today() 更新的是中国时间还是美国时间
    `datetime.date.today()`函数返回的是运行该代码的计算机的**本地时间**¹²。这意味着,如果你在中国运行这段代码,它将返回中国的当前日期;如果你在美国运行这段代码,它将返回美国的当前日期¹²。如果你想获取特定时区的日期和时间,你可以使用`pytz`模块。例如,要获取北京时间,你可以使......
  • Nacos-配置热更新【自动刷新】
    Nacos中的配置文件变更后,微服务无需重启就可以感知,通过下面两种配置实现:方式一:在@Value注入的变量所在类上添加注解@RefreshScope 方式二:使用@ConfigurationProperties注解读取配置文件内容packagecn.itcast.user.config;importlombok.Data;importorg.springframewo......
  • go test个人经验(持续更新)
    名称规范算不上规范。是我使用Goland生成testfunc的时候的自动命令规则,所以记录一下。为某个函数编写测试方法:funcFoo()errorfuncTestFoo(t*testing.T){}为某个struct的方法测试:typeClientstruct{}func(c*Client)Foo()errorfuncTestClient_Foo(t*t......
  • fork后更新仓库代码
    目录fork后更新仓库代码场景:模型操作方法如下:方法一、从github上进行操作然后更新如何在Github网页端同步更新?方法二、通过命令行fetch拉取原仓库更新fork后更新仓库代码场景:github上fork原项目,如何将本地仓库代码更新到最新版本?在github上fork原项目,项目组成员发起pullreq......
  • Vue中的异步更新和 $nextTick
    场景引入需求:当用户点击编辑按钮后,显示一个弹窗,该弹窗有一个文本框,使得文本框自动聚焦看似代码如下:this.isShowEdit=true;//显示输入框this.$refs.inp.focus();//获取焦点代码看似没有问题,显示文本框后,让文本框聚焦,但是在vue中却不能实现,这是由于vue是异步更新Dom的t......
  • 抖音小程序开发:探索技术创新的代码之旅
    随着抖音小程序的兴起,企业纷纷将目光投向这个充满活力的平台。抖音小程序开发不仅为品牌提供了更广泛的曝光机会,更是技术创新的舞台。本文将带领读者深入探索抖音小程序开发的技术要点,探讨如何通过代码实现个性化、高效的小程序。1.小程序基础框架搭建在进行抖音小程序开发之前,首......
  • 近期歌单(实时更新(我尽量))
    最后更新于:2023/11/11音游曲TJ.hangneil-Apollo搭配PV食用!感觉是很洗脑。我暂时年龄阅历等深度不够,或者现在脑子还没发疯,所以不能具体描述感受了啊/kk。ARForest-InvertesWorld草了啊,今天早上来机房刷B站看到臀和Rotaeno联动,再一看诶诶ARForest,点进曲子......
  • 预热篇1:大模型训练显卡选型
    AI模型训练主要使用GPU的算力,GPU,显卡这些知识大家都懂的,还是简单说一下GPU吧:GPU是显卡的核心部分,GPU承担着与CPU不同的定位和功能,芯片设计思路也完全不同,GPUCore小而且多,它不承担系统管理、调度的功能,完全专注于使用(大量的)小核心并行化地执行运算。GPU的几个主要用途:1、......
  • pycharm通行证更新问题
    专业版学生认证到期更新方法pycharm到期前一周会发信息给你的账户,或者在pycharm软件内右下角弹出提示更新通行证。具体通行证更新教程与初次申请一样,网上有教程,在此不过多叙述。下面讲讲更新后怎么在软件内更新许可证。如果只是简单通过了申请,网站上的显示如下图:但在软件内,可......