【分享最近看的Unity差量更新】
(觉得太长不想看的可以直接跳到最后一句)
原因是这样的,公司项目用的是Addressables + ILRuntime,逻辑代码已经迁移到Hotfix项目,但因为代码量已经达到数十万行,因此打包出来的dll文件有17M这么大,而Addressables的增量更新每次都会重新下载整个文件,于是老大让我去搞个BSDiff差量更新的玩意,OK没问题(信心满满)。
看了下大致工作流程,主要是通过旧文件和新文件进行文件比对来生成patch文件,然后热更的时候只需要下载这个patch文件即可,下载完后通过旧文件和patch文件生成新文件,这个新文件就是最新的热更dll,OK不难理解(有点意思)。
再看了下算法,大概是先通过后缀排序来获取旧文件的一组字典集,字典集里保存了后缀的起始位置、编码(ASCII码)、后缀。然后通过这个字典集在BSDiff算法中对新旧文件进行比较(一句两句说不清),最后得到差异串(做减法),由于差异串中含有大量的0,所以很容易被压缩,因此又需要进行zip压缩,由此可见BSDiff是很依赖zip的。
然而看完算法我人已经麻了,好不容易把后缀排序搞出来了,一测有bug,再看BSDiff,妈耶是我太菜看不懂,裂开💀,一开始Github上还找不到,后来发现是我的关键词有问题,搜C# BSDiff反而找不到,直接搜BSDiff再定位到C#语言反而找到了,而且还是unity的(惊不惊喜?!)
OK,链接分享出来了,下面这个⬇️,还是国人搞的,Github yyds🤣。
github.com