面试可能提到的cocos-js优化

1:缓存的创建和清除 
为了提供性能,Cocos2d-JS提供了几个缓存,分别应用与不同的情况。这些 缓存类有纹理缓存,精灵帧缓存,动画 缓存和着色器缓存。 
场景与资源 
不同的场景中资源的占用不同,而资源的占用决定了缓存创建和清除的时机。 
场景与资源 
不同的场景中资源的占用不同,而资源的占用决定了缓存创建和清除的时机。 
缓存创建和清除时机 
使用纹理和精灵帧缓存时,一个原则是:“尽可能将所有资源加载到缓存”。 
事实上作为游戏开发人员,需要照顾那些配置比较低的设备。用户不可能采用“尽可能将所有资源加载到缓存”一刀切的方式。但是可采用将缓存分为短周期和长周期的方式。 
1.短周期缓存中内容一方面玩家花费的时间短,另一方面不跨场景,没有必要长时间缓存。 
可以在该场景进入函数onEnter()中创建缓存。在该场景退出函数onExit()中清除。 
注意:一定要慎重使用在onExit()函数中的removeSpriteFrames()函数,removeSpriteFrames()会清除素有缓存里的帧。 
2.长周期缓存 
长周期缓存中内容一方面玩家花费时间长,另一方面可能跨场景。为了获得流畅的用户体验,不能经常反复创建和清除缓存。而是长时间缓存。长周期缓存可以分为两种情况:贯穿整个游戏的长周期缓存和关卡长周期缓存。 
贯穿整个游戏长周期缓存 
贯穿整个游戏长周期缓存是在游戏刚刚启动时,给用户展示Loading等信息时创建的缓存。 
关卡长周期缓存 
关卡长周期缓存是开始某个特定关卡等场景时场景的缓存。 
清除的时候与贯穿整个游戏长周期缓存类似。一般不需要考虑清楚缓存的问题。 
图片与纹理优化 
背景图片的优化 
1.不要Alpha通道 
2.拼图 
3.加载到纹理缓存的时机 
4.考虑使用瓦片地图 
JSB内存管理 
JavaScript语言有自己的内存管理机制,它是自动内存回收的。而在Cocos2d-JS中的JSB是通过Cocos2d-x在本地平台运行的。那么JSB的内存管理就离不开Cocos2d-x内存管理约束。 
因此,使用Cocos2d-js引擎开发游戏的时候,如果游戏运行于Web平台,他的内存管理是采用JavaScirpt固有的内存管理机制。如果游戏运行与JSB本地平台。那么引擎提供的特有对象,采用Cocos2d-x引用计数内存管理方式。 
使用Bake层 
Cocos2d-JS引擎开发的游戏运行于Web平台的时候,如果采用Canvas模式渲染场景中不怎么变动的内容,则会消耗大量的渲染时间。Canvas模式渲染过程是调用drawImage绘制场景中的对象。即便静止不动也会逐一进行绘制。但是同样的渲染内容,对于OpenGL和WebGL渲染就不会有太大性能开销。 
针对Cocos2d-JS中的Web平台Canvas渲染模式,可以使用Bake层,Bake层可以将本身以及其子节点都备份到Canvas上。只要自身或其子节点不做修改,下次绘制时,将直接把Canvas上的内容一次渲染出去。这样,原来需要多次的渲染过程,现在只需要一次就可以完成了。 
注意:如果是经常变化的节点对象,采用Bake层渲染不仅不会提高性能,反而会影响性能。 
使用对象池 
对象池类cc.pool、放入到池中的对象需要实现unuse和reuse函数。unuse函数是对象被放入池中时调用。reuse函数是从池中获得重用对象时使用的。 
在使用对象池cc.pool时需要往对象池中添加对象。 
cc.pool.putInPool(object) 
当调用putInPool()函数添加对象时,cc.pool底层将调用object.unuse()函数进行初始化处理。 
为了从对象池中查找对象可以通过如下语句实现: 
var object =cc.pool.getFromPool(“MySprite”,args); 
getFromPool()函数中的MySprite是类名,args是参数。通过这个类名和args参数可以获得可重用对象。如果返回值为空,则说明没有找到合适的可重用对象,在对象被返回之前,cc.pool底层将调用reuse函数。并用参数args来初始化该对象。 
在使用getFromPool()函数查找对象之前,最好使用如下函数判断一下池中是否存在可重用对象: 
var exist=cc.pool.hasObject(“MySprite”); 
从池中删除一个对象可以使用如下代码: 
cc.pool.removeObj(object); 
清空整个池可以使用如下代码: 
cc.pool.drainAllPeople(); 
Web平台需要搭建Web服务器,Web服务器的主要功能是提供网上信息浏览服务。 
1.Apache 
Apache HTTP Server仍然是世界上用的最多的Web服务器,市场占有率达60%左右。它的成功之处主要在于它的源代码开发支持跨平台的应用。可以运行在几乎所有的UNIX、Windows、Linux系统平台上 
2.Tomcat 
Tomcat是一个开放源代码。运行Servlet和JSPWeb应用软件的基于Java的Web应用软件容器。 
3.IIs 
Microsoft的Web服务器产品为Internet Information Services(IIS),IIS是允许在公共Intranet或Internet上发布信息的Web服务器,IIS是目前最流行的Web服务器产品之一。 
4.WebSphere 
WepSphere Application Server是一种功能完美、开放的Web应用程序服务器,是IBM电子商务计划的核心部分。他是基于Java的应用环境,用于建立、部署、和管理Internet和Internet Web应用程序 
5.WebLogic 
Oracle WebLogic Server是一种多功能、基于标准的Web应用给服务器,为企业构建自己的应用提供了坚实的基础。Oracle WebLogic Server在使应用服务器成为企业应用架构的基础方面继续处于领先地位。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值