Cocos Creator—优化首页打开速度

Cocos Creator是一个优秀的游戏引擎开发工具,很多地方都针对H5游戏做了专门的优化,这是我比较喜欢Cocos Creator的一点原因。

其中一个优化点是首页的加载速度,开发组为了加快首页的渲染速度,减少白屏时间,把逻辑代码和首页加载代码做了彻底分离。首次页面加载的只是一个相当于加载器的初始化文件,文件体积特别小,不像某些引擎,一开始就需要加载主逻辑js文件,一开始就给我来个上百kb的文件加载,然后才能显示loading条,白屏时间当然会延长不少。

说到这里,不得不吐槽一下Cocos的开发文档,居然没有专门针对首页loading条做任何说明,害我研究了半天都不知道怎么定制自己的首页loading界面。这里如果有遇到不知道怎么定制首页loading界面的同学,可以看我另一篇的文章:《Cocos Creator—定制H5游戏首页loading界面》

话说回来,开发者虽然专门针对首页加载时间做了优化,但对于前端页面优化来说,还是不够彻底的,我们还有不少优化时间。首先,我们看一下用Cocos Creator构建发布后的mobile-web页面请求图:

在页面首次出现之前,需要发起4个请求,并且这4个请求都是小文件,其实是没有必要的,特别是在服务器端还有gzip压缩的情况,更理想的情况是一个请求就能完成所有的工作。

另外这4个文件都没有经过代码压缩,例如html文件:

这里也有不少优化空间。

综上所述,我们有了压缩合并的方案,这里可以通过gulp实现。

有些同学会问:webpack更酷更流行为什么不用webpack?答:因为webpack本质上是模块化打包方案,我们这里只是简单对代码做一些构建处理,用gulp更轻量更合适。

gulp安装请访问:https://gulpjs.com/

nodejs安装请访问:http://nodejs.org/

另外需要安装gulp相关插件:gulp-file-inline gulp-htmlmin

思路如下:

  1. 通过gulp-file-inline把style-mobile.css,settings.js,main.js inline到html文件,减少请求
  2. 通过gulp-htmlmin把html文件压缩,减少空格,压缩代码量,减少文件体积

gulpfile文件代码:

var gulp = require('gulp');
var fileInline = require('gulp-file-inline');
var htmlmin = require('gulp-htmlmin');

gulp.task('htmlmin', function(cb) {
  gulp.src('./build/web-mobile/*.html')
  .pipe(fileInline())
  .pipe(htmlmin({
      collapseWhitespace:true,
      removeComments: true
  }))
  .pipe(gulp.dest('./build/web-mobile/')
  .on('end', cb));
});

在命令行里面执行gulp,大功告成!压缩后的请求如下图:

大家可以看到,原来的4个请求只剩下build一个请求了,而且经过服务器的gizp压缩,还能缩小到2-3kb的大小,如果配合cdn策略,基本上能让你的H5游戏首页秒开。

完整代码可以访问:https://github.com/babyzone2004/cocosMd5,这个示例包含了Cocos Creator图片压缩优化,减少首次文件请求,html压缩,动态更新定制loading图等功能哦。

ps:

我们团队正在招聘优秀的H5游戏开发工程师,如果你符合以下条件:

  1. 白鹭引擎/Cocos2d-js/Layabox等H5相关的开发经验
  2. 希望快速成长,不甘平庸

请联系我吧:babyzone2004@qq.com

18赞

不错的分享~

执行gulp之后没有任何变化

从30ms,优化到了20ms,真没必要为了10ms搞这么一大堆。自己当作技术研究研究,还是可以的。

1赞

在手机上,尤其是安卓上,还是有必要的
你只看到了PC上的效果而已

不仅仅是10ms的优化。这个优化可以大大减少首页的白屏时间。

  1. 首页显示需要加载4个请求,实际上由于移动端各种网络情况,任何一个请求block都会影响首页的显示,通过合并优化,能使首页被block的概率减少4倍以上。
  2. 通过合并压缩,首页可以达到2kb以内,比之前15KB减少7倍,这个优化能让游戏在极其糟糕的网络环境也也能出现首屏内容,对减少因等待流失的用户是大有好处的。
  3. 通过简单gulp,一劳永逸,也不是很麻烦。
    实际在游戏运行测试的时候对比,就会发现这个优化是很有必要的。
1赞

github上的项目是可以运行的,可以下载测试对比。

抓到大神一只

这个功能可以合并到引擎里吗

安卓上怎么优化啊,启动黑屏好几秒才能显示ui

好棒的分享

感觉很厉害的样子,,,大佬流啤

mark

大佬我要送你上头条

这个优化其实没有必要,其实变化最多的是setting.js文件,然而合并后每次都会更新整个文件。白屏问题可以用先移动到屏幕外,加载完成后移动回来完全能解决。

一般开发的时候不用优化啊? 要deploy的时候再做就行了.
白屏指的是点击游戏的url到出现loading页面的时间, 有些很差的手机加上很差的网速, 就会卡黑屏或白屏.
光开始那四个请求加上未压缩的js跟css, 有没有优化就会差很多.

只有第一次进入会有四个请求会慢点,后面进入浏览器会缓存,基本上是秒开。只要不设计到loading调整就不会再次下载这三个文件呀!只有settings.js这个文件有变动会下载。

第一次因为加载久了点,用户流失,GG。

mark

image
楼主想问一下 内联的时候报了一下这个错误 这是需要怎么处理啊