所谓资源包的增量更新是指,比如有一个资源包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开发实现资源包增量更新相关推荐

  1. 一些常用的iOS开发网站资源分享

    Android 开发程序员必备网站:http://jammk.iteye.com/blog/2335318 ---------------------------------------------- ...

  2. bsdiff算法c语言实现,iOS 使用bsdiff进行资源文件增量更新(bsdiff / bspatch)

    bsdiff介绍: bsdiff是一种二级制差分工具,由bsdiff与bspatch组成, 将oldfile与newfile做二进制数据差分(bsdiff操作),得到更新的部分(patch文件),再与 ...

  3. iOS 开发的资源整理

    本文整理了常用的iOS.mac开源项目及类库,是开发者必备的一份资料,现在分享给广大的iOS程序员兄弟们,希望给他们的开发工作带来帮助. UI 下拉刷新 EGOTableViewPullRefresh ...

  4. iOS开发三方资源 - 欲先攻其事必先利其器

    一:源代码实例 1:快速搭建项目源代码 地址:https://github.com/wujunyang/MobileProject MobileProject项目是一个以MVC模式搭建的开源功能集合, ...

  5. iOS开发系列文章(持续更新……)

    iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...

  6. android 补丁包增量更新

    ●功能版本:增量更新是Google 4.1增加的新功能 ●功能背景: 现在的安卓Apk越来越大,而在此之前如果用户发现有新版本的话,需要重新把对应程序的新版本下载下来,有时候并不是重大更新,仅仅只是优 ...

  7. IOS开发一些资源收集

    从别的地方看到的,多谢作者,现贴在这里备忘. 在线教程 iOS技术概述    我个人感觉这是开始iOS开发第一步,了解一下iOS整体的结构,有哪些支持类库.如何使用类库等等一切基础的概念性指示 iPh ...

  8. IOS开发之----资源汇总

    学习过程当中查找到的资料,做一个记录,以便更多朋友查看. 开发的过程有时候是简单的,因为我们可以站在巨人的肩上,跳得更高,走得更远. 如何用Facebook graphic api上传视频: http ...

  9. 应用更新iOS 开发:应用内实现 更新提醒

    本篇文章是一篇关于应用更新的帖子 前目绝大多数的应用都可以实现应用更新后,打开应用能就失掉更新提示.这有利于用户的更新.         关于如何实现的式方,很多人希望Xcode本身可以供提响应的AP ...

最新文章

  1. Android之一起玩转下拉刷新控件
  2. 利用 test 命令的测试功能
  3. DOS常用网络相关命令
  4. java https post get请求_JAVA利用HttpClient进行POST和GET请求(HTTPS)
  5. SqlServer两表之间:根据一个表的字段更新另一个表的字段
  6. loading怎么关闭 vant_Vant Loading 加载
  7. [C#] LINQ之GroupBy
  8. 下载知乎视频并在线播放
  9. Linux下安装字体后刷新字体
  10. httpclient4下载图片 java实现
  11. 非度量多维标度_非度量多维尺度分析
  12. 2017年精选文章集合
  13. background url怎么填充_CSS background 属性
  14. phpmyadmin突破secure_file_priv写shell 的渗透
  15. 模电笔记7 多级放大电路的耦合方式及其优缺点和适用电路
  16. python生成二维码_使用python生成二维码
  17. 工具及方法 - 查看飞机信息
  18. JavaScript之childNodes 和 children 区别
  19. AV Foundationd 学习之(一)
  20. 使用crow创建一个c++的web服务

热门文章

  1. java在屏幕上打印出乘法口诀,Java打印乘法口诀
  2. 战地系列服务器架设,战地3服务器架设数据库
  3. 手持天馈线测试仪基站测试分析专家
  4. 使用Spark和Pig统计每秒钟微博数量
  5. 爬虫 - 收藏集 - 掘金
  6. mysql 索引未命中_mysql索引命中规则
  7. 365天深度学习训练营-第P7周:咖啡豆识别
  8. HTML界的“苏炳添”——详解Canvas优越性能和实际应用
  9. 手机搜狐概念版 html,概念版来了 手机搜狐带你全新体验移动式阅读
  10. POJ1830开关问题