Creator优化心得:减少脚本文件的大小

Stella981
• 阅读 591

星期2是公众号更新的一个时间点,Shawn这几天情事太多,眼看就快要过12点了,公众号教程看来今天黄呀!但是不发晚上睡不着呀,看来我是中了得到罗胖的毒“死磕自己”,一定要把公众号给发了。还好之前留着大神Colin的一些文章,还没在公众号上推送过,我立马读了一下,任然有不少收获,现将这篇文章分享给大家,在此感谢Colin!

Creator优化心得:减少脚本文件的大小

在深圳Cocos沙龙上,有幸结识了社区中大名顶顶的Colin,Shawn在论坛上第一次看到Colin的团队用CocosCreator制作的《热血暗黑》时就被深深地震撼到了!更为重要的是,Colin将他的技术心得和宝贵开发经验写成文字,每一篇分享都是满满的干活,而且幸运的是Shawn得到Colin的授权许可,将他的文章散播到奎特尔星球,与你一起欣赏一起成长!

Cocos Creator优化心得:减少脚本文件的大小

首先得说明,我们做的是原生版的手游,所以下面的优化只对原生版有用。

众所周知,当前的Creator不管是调试还是打包,都会将脚本先打包成一个大文件。这对于小型一点游戏项目没有太大问题,一旦代码以万行计,问题就各种暴露出来了:

  • 首担其冲是开发时的编译,我们目前的脚本是11万行左右,改一下代码,基本上需要编译20秒以上。

  • 其次是程序在手机中的启动时间,编译成jsc后,大概是5M左右,JS要加载这5M脚本,还是需要一些时间的。

  • 最后是热更新大小,5M的文件压缩之后,差不多是1.7M左右,也即是每次的热更最小需要这么大小。

我原来的想法是将策划的配置表设置为插件的方式,这样大约可以减少一半的代码行,不知道你对这个数据的感觉如何,对于一个长线的MMO来说,5万行配置数据是很正常的。但是看了官方文档,说插件会在脚本启动前一次性加载,而配置文件大概有200多个,这在安卓上可能会很恐怖的。我还真就编译了一个配置数据是插件的安卓包试过,结果启动时间是10秒左右,而且内存暴涨。从这个例子也侧面证明安卓的IO速度真是出了名的慢,因为这个限制,也没去深入研究,只好作罢。

今天经由@panda的提醒,才知道插件是可以不用一次性加载的,在打包出来的main.js中有:

var jsList = _CCSettings.jsList

这样的代码,jsList里面就包含着插件的脚本文件,我只需要在打包过程中,修改main.js文件,将配置表的插件文件从jsList中删除,那么配置表就不会被预先加载了,代码类似这样:

var jsList = _CCSettings.jsListif (jsList) {        for (var i = jsList.length-1; i >= 0; --i) {                if (isConfigFile(jsList[i])) {                    // 这是个伪函数,用来判断是不是配置表的
        jsList.splice(i, 1);
    }
    }
}

这里先解答点疑问,为什么不将配置文件存为json,在程序中要用再去加载。原因是Creator加载数据都是异步的,这意味着,我每次需要数据的时候,都需要用回调函数的方式,这会很麻烦的。

回到上面,作为插件的配置数据,就不能用require简单的取了,我写了一个函数,必须通过这个函数去取配置表:

window.requireConfig = function(configName) {        if (!window[configName] && cc.sys.isNative && cc.sys.isMobile) {        require("src/assets/Script/Config/" + configName + '.js')
    }    return window[configName];
}

当插件未加载,并且是手机的原生版,就调用require去加载插件,注意里面的路径。插件加载完后,会保存为全局变量,所以如果全局变量已经存在,就直接返回了。关于插件的一些限制,可以看看官方文档。

从上面可知,其他平台插件是会先加载的,由于我们做的是手游,其他平台只作为开发调试之用,所以就不管了。我索性把上面的脚本也当作一个插件,这样无论在哪里,都可以用下面的代码获取配置数据:

var mapCfg = requireConfig("MapConfig")console.log(mapCfg.name)

另一个值得提的地方,是requireConfig尽量在函数中调用,不要像require那样放在模块头,这样可以尽可能的延迟插件的加载。我统计过,在没有做这个处理之前,手机启动到登陆界面,一共加载了65个配置脚本。做了处理后,只加载了5个。这对于手机的启动速度也是非常有好处的。

经过上面的优化之后,脚本行数降到5万多行,编译时间降为8秒。project.jsc经过压缩后变成400多K。在一台千元加的安卓上,从启动到进入LOGO界面,大概只要1.7秒时间:)

在这里真要感谢panda,和引擎的人做朋友真好,一句话胜读千行代码。另外,新引擎版本的Creator我也试用了,过段时间再发一些体验心得。


欢迎关注「奎特尔星球」微信公众号,更期待你向公众号投稿,来我们一起成长!

Creator优化心得:减少脚本文件的大小

热门文章TOP10,邀你遨游「奎特尔星球」

  1. Cococ Creator基础教程—meta的秘密(3)

  2. 庆祝「奎特尔」500勇士,诞生!

  3. 当creator遇上protobufjs—感谢有你,再战2.0

  4. Cocos Creator基础教程(7)—场景切换

  5. Cocos Creator基础教程(9)—优化代码编辑器

  6. Cocos Creator基础教程(4)—color属性的妙用

  7. Cocos Creator基础教程(1)—从zIndex开始

  8. Cocos Creator基础教程(2)—聊聊scale与size属性

  9. Creator模块介绍—领略模块化的力量

  10. 探索CocosH5正确的开发姿势

本文分享自微信公众号 - Creator星球游戏开发社区(creator-star)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
2021 最顶级 React 组件库推荐
点上方蓝字关注公众号「前端从进阶到入院」作者丨MaxRozen译者丨王强策划丨小智AntDesign!(https://oscimg.oschina.net/oscnet/a85c35f23bd04e5da6a1e5e68a24119b.png)项目链接:AntDesignh
Stella981 Stella981
3年前
Markdown 简明语法
关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己。本篇文章同步微信公众号欢迎大家关注我的微信公众号:「醉翁猫咪」!(https://oscimg.oschina.net/oscnet/up1d5ae683f66a54eb857ab1a178a657b6.jpg)今天我们了解一下什么是Markdow
可莉 可莉
3年前
2021 最顶级 React 组件库推荐
点上方蓝字关注公众号「前端从进阶到入院」作者丨MaxRozen译者丨王强策划丨小智AntDesign!(https://oscimg.oschina.net/oscnet/a85c35f23bd04e5da6a1e5e68a24119b.png)项目链接:AntDesignh
Wesley13 Wesley13
3年前
CSS 奇思妙想:超级酷炫的边框动画
点上方蓝字关注公众号「前端从进阶到入院」精选原创好文助你进入大厂文章转载自公众号「iCSS前端趣闻」今天逛博客网站shoptalkshow\1\,看到这样一个界面,非常有意思:!(https://oscimg.oschina.net/oscnet/9655b35af5a045999ff55c144a3f7c
Wesley13 Wesley13
3年前
Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
!(https://oscimg.oschina.net/oscnet/3e08a942dd884e9ab82b63a1f3c4aada.jpg"未命名文件.jpg")Java技术栈不可错过的Java 技术公众号!(https://oscimg.oschina.net/oscnet/00fcff52518e
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
3年前
B站上的这位宝藏UP主,是我有眼不识泰山!
!(https://oscimg.oschina.net/oscnet/e06248e302f046d4b4ce964323d23cfe200.jpg)作者|ithuangqing来源|编码之外(ID:ithuangqing)之前在公众号上分享过这样的一篇文章,大概就是给大家总结一下在B站上可以供你学习的J
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这