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开发实现资源包增量更新相关推荐
- 一些常用的iOS开发网站资源分享
Android 开发程序员必备网站:http://jammk.iteye.com/blog/2335318 ---------------------------------------------- ...
- bsdiff算法c语言实现,iOS 使用bsdiff进行资源文件增量更新(bsdiff / bspatch)
bsdiff介绍: bsdiff是一种二级制差分工具,由bsdiff与bspatch组成, 将oldfile与newfile做二进制数据差分(bsdiff操作),得到更新的部分(patch文件),再与 ...
- iOS 开发的资源整理
本文整理了常用的iOS.mac开源项目及类库,是开发者必备的一份资料,现在分享给广大的iOS程序员兄弟们,希望给他们的开发工作带来帮助. UI 下拉刷新 EGOTableViewPullRefresh ...
- iOS开发三方资源 - 欲先攻其事必先利其器
一:源代码实例 1:快速搭建项目源代码 地址:https://github.com/wujunyang/MobileProject MobileProject项目是一个以MVC模式搭建的开源功能集合, ...
- iOS开发系列文章(持续更新……)
iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...
- android 补丁包增量更新
●功能版本:增量更新是Google 4.1增加的新功能 ●功能背景: 现在的安卓Apk越来越大,而在此之前如果用户发现有新版本的话,需要重新把对应程序的新版本下载下来,有时候并不是重大更新,仅仅只是优 ...
- IOS开发一些资源收集
从别的地方看到的,多谢作者,现贴在这里备忘. 在线教程 iOS技术概述 我个人感觉这是开始iOS开发第一步,了解一下iOS整体的结构,有哪些支持类库.如何使用类库等等一切基础的概念性指示 iPh ...
- IOS开发之----资源汇总
学习过程当中查找到的资料,做一个记录,以便更多朋友查看. 开发的过程有时候是简单的,因为我们可以站在巨人的肩上,跳得更高,走得更远. 如何用Facebook graphic api上传视频: http ...
- 应用更新iOS 开发:应用内实现 更新提醒
本篇文章是一篇关于应用更新的帖子 前目绝大多数的应用都可以实现应用更新后,打开应用能就失掉更新提示.这有利于用户的更新. 关于如何实现的式方,很多人希望Xcode本身可以供提响应的AP ...
最新文章
- Android之一起玩转下拉刷新控件
- 利用 test 命令的测试功能
- DOS常用网络相关命令
- java https post get请求_JAVA利用HttpClient进行POST和GET请求(HTTPS)
- SqlServer两表之间:根据一个表的字段更新另一个表的字段
- loading怎么关闭 vant_Vant Loading 加载
- [C#] LINQ之GroupBy
- 下载知乎视频并在线播放
- Linux下安装字体后刷新字体
- httpclient4下载图片 java实现
- 非度量多维标度_非度量多维尺度分析
- 2017年精选文章集合
- background url怎么填充_CSS background 属性
- phpmyadmin突破secure_file_priv写shell 的渗透
- 模电笔记7 多级放大电路的耦合方式及其优缺点和适用电路
- python生成二维码_使用python生成二维码
- 工具及方法 - 查看飞机信息
- JavaScript之childNodes 和 children 区别
- AV Foundationd 学习之(一)
- 使用crow创建一个c++的web服务