导读
cocos游戏主流使用的有多种热更方案,比如全量更新、增量更新和差异更新。那么我们应该选哪一种方案呢?要回答好这个问题,我们必须从用户角度和公司角度来看他们最核心的需求是什么。
需求
用户需求:“我最大的需求是不要让我在更新界面停留太久”
公司需求:“我最大的需求就是我能快速的迭代产品,修改bug”
方案对比
知道了需求,我们就有了衡量方案好坏的标准。那么接下来我们开始对比方案。
全量更新
全量更新既将所有资源打成一个zip包,更新的时候需要将整个zip包更新下来。它的优势在于逻辑最简单,操作起来也方便。它的劣势在于无论你的改动有多大,用户都需要将整个包的资源全部下载下来。除非你的包体大小能长期做到非常小,比如小于5M,否则就显然地违背了上面提到的用户需求。增量更新
增量更新既将现在版本的与上一个版本的资源做比较,将变化的文件抽离出来单独打成一个zip包。这样的优势在于只让用户更新变化的文件,可以很显著的降低热更包的大小。因为是zip包,下载起来也快。初看起来似乎是一个不错的方案,但有一种用户场景却会让用户十分抓狂。想象一下你的最初版本是1.0.0,最新的版本是1.0.99。假如现在有一个用户手机上的版本是1.0.0,那么当他打开游戏后,他将会经历1.0.0更新到1.0.1,再从1.0.1更新到1.0.2……最终更新到1.0.99。当用户看到周而复始的进度条,他此刻一定是很有冲动删除这款游戏。开发人员管理版本也会非常痛苦,每一个版本都需要发一个增量包放到服务器。公司也痛苦,需要购买那么多服务器资源用于存放这么多包。所以这个方案显然违背了上面的用户需求和公司需求。差异更新
差异更新也是将所有资源打成一个热更包,但是用户无需下载所有资源,用户包会自己对比它与热更包之间的差异,只下载有差异的文件。它的优势在于无论版本差异有多大,用户永远只会下载自己真正需要下载的文件,而无需浪费时间和流量去下载哪些压根不需要更新到的资源。因为下载的文件小,也就从源头上解决了用户需求和公司需求。当然它也有劣势,第一就是方案更复杂,但是没关系cocos creator官方已经有现成功能代码。另一个劣势在于如果项目很大且差异很大,则下载的散列文件会很多,则下载起来没有zip包快。但这其实属于优化层面的问题了,而非原理上的问题,你完全可以在差异更新的基础上再去优化下载速度的问题,比如服务器参与打差异zip包?这里不做深入探讨。
总结
如果你不想在热更这块下功夫,并且你的包体能长期保持很小(比如<5M),那么全量更新是一个不错的选择。除此之外,差异更新无疑是最适合的热更方案。如果你的项目很大,每次更新文件会很多,那可以考虑在差异更新的基础上自己做优化方案。