零·热更新的实现原理
以cocos2dx-lua为例,当用户启动游戏,游戏将会先检索手机的A,查看是否有脚本代码与资源文件,如果有,则加载这些代码文件,否则从安装包内的代码文件开始加载。
所以当我们希望能够动态更新用户手机的内容时,只需要操作刷新目录A即可。
假设 线上发布了版本1.0,现在需要进行版本1.1的热更新
一、差量包方式热更
需要注意,假如1.2发布,因为线上同时存在1.0、1.1版本,所以需要生成差量包 1.0-1.2.zip,以及 1.1-1.2.zip。
同理,假如一款产品经历了更新:1.1、1.2、1.3........1.9,那么当进行2.0热更新的时候,那么需要生成的差量包是 1.0-2.0.zip、1.1-2.0.zip...........1.9-2.0.zip,
这种方式的缺点很明显:随着发布的版本增多,维护的成本巨大。
那么有办法解决这个问题吗? 继续往下看
二、md5列表对比方式
md5列表:即对项目内每个资源(代码、图片、音频、视频等等)生成对应的md5值,通常以xml、json的方式保存起来
那么同样,假如我需要发布1.2版本呢?
简单,我们只需要上传一份1.2版本的最新资源与md5列表在服务器上就行,
与方式一不同,服务器永远只需要维护一套更新资源,不用管之前发布了多少版本。
线上可能会存在很多版本不一的客户端,不过没关系,它们各自都会拿自身的md5列表与最新的md5列表比对,
生成自己独一无二的差异文件列表。
但是这种热更的方式也有自己的短板,方式一是把所有的文件打包成zip,而方式二则是一个个下载文件,所以在下载速度上肯定是略逊一筹的。
三、总结
笔者在工作过程中,两种方式的热更都接触过,就个人而言更喜欢第二种方式,理由是,维护起来真的很简单,简单到由前端就能够实现所有功能。
不过客观来讲,两种热更的方式并没有强弱之分,只是是否用空间换体验的考量,而且成熟点的项目组,都会对各自选择的方案进行优化,来减少两个方案个字的短板。
如果还想对热更新有进一步的了解,请点击我