iOS开发实现资源包增量更新
Posted JackLee18
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发实现资源包增量更新相关的知识,希望对你有一定的参考价值。
所谓资源包的增量更新是指,比如有一个资源包1.0版本, 现在如果升级到1.1本,那么只需要将1.0的版本信息发送给服务端,服务器端返回一个差分包。将这个差分包和本地的1.0的资源包进行合并生成1.1版本的资源包。
差分包增量更新的优势
1)节约流量,降低耗电量
之前每次升级都需要下载一个完整新版本资源包,现在每次升级只需要下载一个很小的差分包就可以了(ps:一般情况下,两次迭代之间的资源包差别很小)。由于需要下载的文件小了很多,因此手机的耗电量也降了下来。
2)提高资源包更新成功率
由于移动设备所处的环境网络情况复杂多变,稳定性不可预测。因此较小的差分包可以较快的完成资源包的升级,同时下载时间的减少,也降低了网络出错的概率,可以有效的提高用户资源包升级成功的概率。
差分包增量更新的劣势
实现复杂,维护成本高
为了实现差分包增量更新,客户端需要有增加差分包合并逻辑。服务器端要有单独的差分包服务,能够进行差分运算,同时还要负责差分包的管理。如果1.0到n只有有n-1版本,那么差分包的数量非常庞大(n-1)的阶乘个,因此有必要设置一个范围,如果老版本差别较大,那么可以走全量包的逻辑。
差分包增量更新的使用场景
差分包在ios这边的使用场景还是比较多的,比如混合开发框的web资源包,RN的资源包,weex资源包,以及需要定期迭代的资源包等。
感谢
首先要感谢一位同行,在网上搜了好久,搜到了他的文章,省去了自己扣代码的时间。原文如下:《iOS 使用bsdiff进行资源文件增量更新(bsdiff / bspatch)》
作者:老孟
大家可以先看看上面这篇文章,大概思路就是,利用客户端向服务器端发送请求,携带的必要参数有,客户端当前的资源包A的版本号,资源包的唯一id信息等。服务器端根据当前最新的资源包A的版本号计算出一个差分包,然后将差分包返回给客户端,以及文件签名。客户端拿到差分包后,进行差分包的合并操作,然后对合并后的资源包进行签名,然后和服务器端的签名进行比对,如果一致,就是用新的资源包。
作者老孟的文章里有资源包差分,差分包合并操作的demo,大家感兴趣可以看看。我下载了,简单改了一下就可以运行起来了,修改后的demo下载地址:https://github.com/xindizhiyin2014/Bsdiff_demo
更多参考文章:
https://gist.github.com/9468305/fa8f1307ea4738225fca
https://github.com/cundong/SmartAppUpdates
备注:我们团队主要是做一个人工智能视图进行购物搜索的功能,人工智能文件。模型较大,因此通过差分包进行增量更新。大家对这一块知识感兴趣的,可以参考如下文章:
https://blog.csdn.net/best_coder/article/details/76201275
https://github.com/Tencent/TNN/blob/master/doc/cn/user/demo.md
https://github.com/pytorch/ios-demo-app
https://github.com/Tencent/ncnn
更多干货文章,扫描下方二维码关注公众号
以上是关于iOS开发实现资源包增量更新的主要内容,如果未能解决你的问题,请参考以下文章
游戏开发高阶从零到一教你Unity使用ToLua实现热更新(含Demo工程 | LuaFramework | 增量 | HotUpdate)
游戏开发高阶从零到一教你Unity使用ToLua实现热更新(含Demo工程 | LuaFramework | 增量 | HotUpdate)