客户端性能优化
通用优化经验
1、如无必要,不要在onFrame onSecond onRender这种频繁刷新的事件中,进行大量复杂的运算,或者创建对象,这些事件太频繁了,执行复杂操作对性能开销很大
2、使用缓冲池技术,把频繁使用的数据或者对象缓存起来,避免重复创建
3、不再使用的对象,需要记得回收掉,remove del clear等
4、不要再舞台或者画布上,放置大量的需要渲染的对象,太多的显示对象会严重影响渲染效率
例如在使用fancy3d时,如果在一个UI界面上,同时加载3个或者更多drawboard,每个drawboard加载1个3D模型或者场景,这样的效率极差,优化的办法是合并,例如把3个模型放入同一个场景中,UI上只有一个drawboard负责加载这一个场景即可
5、使用图集技术,降低io和数据访问次数
6、显式停止计时器,让它们准备好进行垃圾回收
7、使用事件侦听器并在不需要时删除这些侦听器
8、多次调用类属性或者需要从多层嵌套的数组中取值时,避免直接使用this.att,建立局部变量赋值,例如 this.attrs.att => var attrs = this.attrs attrs.att
9、把一些常用的参数创建为全局变量,避免重复定义
fancy3d项目中,创建一个全局Vector3对象,供客户端运算使用,避免了在使用时重复创建vector3对象的问题
内存泄漏
1、UI泄漏
2、实体泄漏
①各种程序创建的对象的泄漏
忘记回收
由于实体被别的地方引用,导致回收不掉
②美术资源制作时候,由于没有按照规范,导致的实体泄漏,常见的是特效泄漏
在fancy3d项目中,由于特效制作时,没有正确的设置粒子的生命周期,导致技能特效显示后不能自动回收,导致客户端特效泄漏
3、代码逻辑导致
H5重度游戏优化经验(针对微信小游戏)
加载
①缓存
微信支持将 代码包4~8m 资源包50m 缓存到本地
commonJS2解决4M包不够用的问题 (拆分代码和配置文件)
微信小游戏不支持动态增加代码
可以将一部分资源存放在本地
5.1 assetmanager 严格 区别于 RES的宽松
Processor 资源加载都会走这里,可以重写Processor方法,增加cache
②资源合并
打包图集 纹理集
subkey
json文件合并 merge.json 写自己的插件plugins
创建
减小
可以着重优化类似进度条这个重复单项
复用
缓存部分内容供复用,可能会涉及到内存问题
egret客户端优化参考资料
egret官方视频 https://mp.weixin.qq.com/s/2XRI7qzUvrZevlijtJ7I8Q
egret渲染优化 https://blog.csdn.net/bibimybest/article/details/80519576
egret内存泄漏 https://blog.csdn.net/yangxuan0261/article/details/81260498
egret分包策略文档 https://mp.weixin.qq.com/s/9vg2cA1L-_eY2lTdbTSVeQ