Egret性能优化之优化

Stella981
• 阅读 889

此篇转载自 https://ashan.org/archives/522

有人说Egret的性能不好,甚至没有原生JS写出来的性能高效。其实大部分时候都是由于开发者所使用的方法不正确。导致游戏性能下降,甚至出现卡顿的现象。

游戏作为性能消耗大户,很多时候都会将系统硬件的性能使用到极致。想要提高你的游戏性能,有一个非常重要的前提。你需要对引擎渲染部分非常了解。能够在开发中避免不必要的低级错误。

这篇文章简单的聊一聊渲染部分的优化。如果你的优化做的好,那么就会解决绝大部分性能问题。

在说优化之前,你需要非常清楚Egret的Main Loop。如果对此不了解。那么你拥有非常高的几率写出拥有严重性能问题的游戏。

Egret在内核中是如果来处理渲染部分的呢?请看下图

Egret性能优化之优化

Egret每刷新一帧的时候,会执行四步操作。你在制作游戏的时候应该清晰的记住四步操作都在干什么。

第一步,我们执行了一次EnterFrame,此时,引擎会执行游戏中的逻辑。并且抛出EnterFrame事件。 如果你在这里编写了大量消耗性能的代码,那么你的帧频就会开始下降。你应该明白,不要将大量代码都放到EnterFrame中去处理。除非你想让你的用户体验一个慢世界的游戏。

第二步,引擎会执行一个clear。将上一帧的画面全部擦除。

第三步很有意思,不仅仅是有意思,也是非常消耗性能的一步。此时,Egret内核会遍历你游戏场景中的所有DisplayObject,并重新计算所有显示对象的transform。

最后一步,如果你接触过canvas,那么你了解,这一步会将所有的图像全部draw到画布中。

好了,简单的了解了Egret渲染机制,那么到底如何去优化我们的游戏。我简单罗列一下基本要素。具体如何避免,解决方案怎么操作,每一个都会扩展出无数内容。在后面的文章我会依次讲解。

1、不想要的DisplayObject,请removeChild 如果是设置了他的visible属性为false,确实这个显示对象不会被渲染出来。但是,它还会参加第三步的计算过程。所以无形中增加了性能开销。 如果某一个图像被其他图像遮盖,那么你就需要移除被遮盖的对象。

2、不要向stage中放置太多的DisplayObject 就如同天朝的人口数量一样,什么东西多了都是噩梦。太多的显示对象不仅仅在第三步会消耗性能,更重要的是,在第四步的时候,会严重影响性能。让帧频下降。 如果作为程序员你的抱怨设计师或者策划师在游戏中添加了太多内容的话。那么我可以给你一个不错的建议。 你可以想办法将画面中的元素进行合并。合并不是将两个Bitmap塞到一个Sprite中。这样并不能起作用。无论是嵌套还是并列,都会消耗大量性能。如果可以,你最好调整游戏元素图片的拆分方式,尽量减少DisplayObject的数量。 另外一种方法是使用cacheAsBitmap,让你的矢量图在运行时以位图形式进行计算。这会大大减少你的矢量图运算。

3、尽量不要在EnterFrame事件中做过多的操作 不得不说,EnterFrame事件派发的太频繁了。在如此高密度的事件中。每执行一次逻辑操作,都要付出非常多的性能代价。 你可以尝试自己定义更多的事件,在某种条件成立时,手动派发自定义事件

4、善用脏矩形 脏矩形是一种非常高效的优化手段,但它也是把双刃剑。用的好,性能飙升,用不好,自取灭亡

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java 性能测试框架工具
性能测试工具对于Java开发者来说,要去学习性能测试工具未免很麻烦。但有时候会有性能测试的需求。junitperfjunitperf(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fhoubb%2Fjunit
爱丽丝13 爱丽丝13
3年前
聊聊前端性能优化
为什么要做性能优化?性能优化有多重要?网站的性能对于用户的留存率、转化率有很大的影响,直白的说,提高网站的性能可以直接提高网站带来的收益。性能优化的分类前端的性能优化主要分为两类:1.加载时优化;2.运行时优化;例如压缩文件、使用CDN加载静态资源属于加载时优化;及时的解绑事件、减少DOM的操作属于运行时优化。吉
巴拉米 巴拉米
3年前
前端性能优化
为什么要做性能优化?性能优化有多重要?网站的性能对于用户的留存率、转化率有很大的影响,直白的说,提高网站的性能可以直接提高网站带来的收益。性能优化的分类前端的性能优化主要分为两类:1.加载时优化;2.运行时优化;例如压缩文件、使用CDN加载静态资源属于加载时优化;及时的解绑事件、减少DOM的操作属于运行时优化。吉
Wesley13 Wesley13
3年前
java系统优化中的位操作优化
本博客来自我的新书《Java系统性能优化》(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fitem.jd.com%2F12742086.html"《Java系统性能优化》")的第四章15节,也欢迎阅读我的的经典书《SpringBoot2精髓》(https://www.o
Souleigh ✨ Souleigh ✨
3年前
前端性能优化 - 雅虎军规
无论是在工作中,还是在面试中,web前端性能的优化都是很重要的,那么我们进行优化需要从哪些方面入手呢?可以遵循雅虎的前端优化35条军规,这样对于优化有一个比较清晰的方向.35条军规1.尽量减少HTTP请求个数——须权衡2.使用CDN(内容分发网络)3.为文件头指定Expires或CacheControl,使内容具有缓存性。4.避免空的
Stella981 Stella981
3年前
JavaScript 性能分析新工具 OneProfile
OneProfile是一个网页版的小工具,可以用全新的方式展示JavaScript性能分析的结果,帮助开发者洞悉函数调用关系,优化应用性能。点击打开OneProfile(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwyvernnot.github.io%2Fjavasc
Stella981 Stella981
3年前
Egret性能优化(代码篇)
代码注意事项:类方法中,将this赋值给另外一个临时变量,如self,再用self进行提高1/3的效率。在循环中,尝试改进写法,减少读取次数:for(vari0,lengtharray.length;i<length;i)。避免双重解释,如eval函数,会使JavaS
Wesley13 Wesley13
3年前
Java Web 前端高性能优化(二)
一.上文回顾上回我们主要从图片的合并、压缩等方面介绍前端性能优化问题(详见JavaWeb前端高性能优化(一)(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fclub.oneapm.com%2Ft%2Fjavaweb%2F399))本次我们主要从图像BASE64
Wesley13 Wesley13
3年前
MySQL性能优化(二):优化数据库的设计
原文:MySQL性能优化(二):优化数据库的设计(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fblog.csdn.net%2Fvbirdbest%2Farticle%2Fdetails%2F81051579)(https://www.oschina.net/action/G
代码层面探索前端性能 | 京东云技术团队
前言最近在做性能优化,具体优化手段,网上铺天盖地,这里就不重复了。性能优化可分为以下几个维度:代码层面、构建层面、网络层面。本文主要是从代码层面探索前端性能,主要分为以下4个小节。使用CSS替代JS深度剖析JS前端算法计算机底层使用CSS替代JS这里主要从