开发者该如何抓住微信小游戏的风口?听Cocos创始(6)

   人气:    发布时间:2018-01-30 15:38

首先为大家介绍一下小游戏资源管的分布方式。大家如果使用过开发者工具的话会注意到,当你开发一个小游戏的时候,你如果点预览,它会有一个上传的过程,之后扫它提供的二维码就可以测试这个小游戏。实际上这个上传的过程就是将你的小游戏包上传到CDN内。在你的用户扫这个二维码时,实际上是从微信的CDN下载这个小游戏包到他的手机上,并执行。


这是最简单的版本,让我们来看一下相对复杂一点的。



微信小游戏为了能够提升首包加载速度,将包体限制在了4M,这显然对很多HTML 5 游戏来说是不足够的。所以大家就需要将一些资源文件放到自己的远程服务器中。也就是这张图所体现的访问关系:当用户扫你二维码的时候,会让小游戏包下载到微信,然后微信内小游戏包代码在执行过程中会请求远程服务器资源。


不同用户会将不同的资源下载到他自己的沙河环境当中,并且不同小游戏之间的资源缓存也是相互分割的。这样就可以保障不同用户和不同小游戏间的资源不会互相冲突。



H5开发者会非常在意首场景的加载体验,微信小游戏也非常需要注意这一点。小游戏在下载过程中会将包首先完整下载,然后才会进行详细的代码完整初始化。在初始化之后再去加载远程资源,再去启动场景。


这与浏览器有很大的区别。浏览器永远是按需加载,当它需要一个资源的时候才会加载一个资源。所以大家一定要在小游戏当中控制好自己的包体大小。



经过一段时间研究并与微信团队进行沟通后,我们得出了一个目前较好的资源解决方案。我们会将代码包放在小游戏包内,所有的资源都放在开发者的Server上。这样,当代码请求某个资源时,就会动态进行动态下载,这样才能满足按需加载的需求。


所以这张图和上面那种图没有太大区别,唯一需要注意的是,在微信CDN上储存代码包,在开发者Server中储存详细的小游戏资源。 值得注意的是,你的代码是不能够放到自己的Server上的,微信小游戏禁止在微信CDN以外的域名中加载它的代码。



接下来我解释一下Cocos Creator是加载微信小游戏时的资源策略。首先,我们同样从微信的CDN当中下载代码包。下载完成后,当你的代码需要某些资源时,我们会先从大包里去查找。若内置资源没有,我们会去查找资源缓存(稍后解释)。如果资源缓存也没有,我们会从远程服务器去下载。数据下载后,我们会将数据自动缓存到资源环境中。这样便形成了一个缓存机制。


我们这样做的原因是,小游戏环境是实际上是没有类似浏览器的缓存和资源过期机制的。 在浏览器中,当用户请求一个页面时,第一次请求会下载所有资源,一段时间后,第二次请求时它会自动检查所有资源是否过期,如果没有过期则会从本地缓存空间中下载该资源,这对于开发者和用户都是透明的。 但小游戏没有这样的机制 ,所以当你的信息再去请求资源时,每次都会重新下载该资源,不管你这个资源此前下载过多少次。所产生耗电量和加载时间对于用户来说都是不可接受的,所以我们在Cocos Creator当中内建了一个更完整的解决方案。