在项目开发的过程当中总结了一下starling的性能优化方案:算法
1. 不要频繁的读取显示对象的宽高:调用宽高属性时会调用显示对象的getBounds()方法,该方法会遍历该对象的全部子对象,从新计算宽高。在频繁使用宽高属性时,如没有特殊须要,最好把宽高保存到变量中,使用变量保存的值替代直接读取宽高属性。数组
2. 扁平化的Sprites:starling在每一帧都会遍历全部对象检查它们的状态,上传它们的数据到GPU进行从新渲染,调用Sprite的flatten()方法后,GUP便不会对该对象进行从新上传渲染,当你须要更新这个显示对象时,能够调用它的unflatten()方法。性能优化
3. QuadBatch:QuadBatch类是一个扁平化的容器,你每在容器上add一个对象时,它都会派发一个"ADDED"和"ADDED_TO_STAGE"事件,当你有不少对象时,也是一个不小的开销,特别时当你使用的纹理都是来自同一个纹理图集时QuadBatch会更加高效,它只能添加Image, Quad, 或 QuadBatch类的实例。性能
4. 减小事件派发:starling的显示对象在add在舞台上的时候都会派发一个"ADDED"和"ADDED_TO_STAGE"事件,移除的时候也是会派发"REMOVEED"和" REMOVEED _TO_STAGE"事件,不少时候这些事件对咱们都没有意义,咱们能够修改starling的显示对象或者自定义一个显示对象,重写它的addChild方法,将事件派发去掉,减小没必要要的开销。字体
5. 清理完全:在销毁一个对象时,保证将对象及子对象销毁完全,并把事件移除干净,starling中频繁建立对象没有销毁就会形成资源超过上限的错误,形成程序崩溃。优化
6. 混合模式:若是有彻底不透明的矩形纹理,咱们可让GPU禁用那些纹理混合。这对于大背景图像特别有用。设置object.blendMode = BlendMode.NONE;编码
7. touchEnable不可点击:给不须要接受事件的对象设置touchEnable= false;减小没必要要的时间监听和派发。spa
8. 使用位图字体:使用位图字体替代系统字体,性能将成倍提升。命令行
9. 纹理图集:starling采用了画家算法来处理显示列表,若是从一个单一的图集加载全部这些纹理,Starling就能够在一次调用中完成全部的绘制。starling中支持最大2048*2048大小的纹理图集。对象
10. 不可见放弃渲染:当显示对象不在屏幕内或者不在可视范围内,咱们能够将其移除或者设置visible属性为false,这样能够极大的减小GPU渲染的压力,提升性能。
11. Image替代Button:在没必要要的状况下,尽可能使用Image不要使用Button,前者在渲染时的速度和开销都要优于后者。
12. 基本的AS3性能优化:使用for替代for each;不要在for循环中频繁建立对象;将数组的length属性赋值到变量上使用,而不是频繁调用等AS3的良好编码习惯。
13. 使用ATF纹理:这个格式很是强大,能够用命令行把一个PNG文件转换为ATF文件(包含针对不一样设备的文件类型Android (ETC1), iOS(PVRTC) , Windows and MacOS (DXT))。Flash Player和AIR会自动根据运行平台选择合适的格式,ATF有着更快的渲染速度、更小的内存占用、更快的上传速度和更小的应用体积等优势,强力推荐使用。
(注:红色为重要优化方案)