
LayaAir
引擎支持AS3、TypeScript、JavaScript三种语言开发,然而无论是采用哪种开发语言,最终执行的都是JavaScript代码。所有
看到的画面都是通过引擎绘制出来的,更新频率取决于开发者指定的FPS,例如指定帧频率为60FPS,则运行时每个帧的执行时间为六十分之一秒,所以帧速
越高,视觉上感觉越流畅,60帧是满帧。
由于实际运行环境是在浏览器中,因此性能还取决于JavaScript解释器的效率,指定的FPS帧速在低性能解释器中可能不会达到,所以这部分不是开发者能够决定的,开发者能作的是尽可能通过优化,在低端设备或低性能浏览器中,提升FPS帧速。
LayaAir引擎在每帧都会重绘,在性能优化时,除了关注每帧执行逻辑代码带来的CPU消耗,还需要注意每帧调用绘图指令的数量以及GPU的纹理提交次数。
第2节:基准测试
LayaAir引擎内置的性能统计工具可用于基准测试,实时检测当前性能。开发者可以使用laya.utils.Stat类,通过Stat.show() 显示统计面板。具体编写代码如下例所示:
?
1
2
Stat.show(0,0)//AS3的面板调用写法
Laya.Stat.show(0,0)//TS与JS的面板调用写法
Canvas渲染的统计信息:
WebGL渲染的统计信息:
统计参数的意义:
FPS:
每秒呈现的帧数(数字越高越好)。
使用canvas渲染时,描述字段显示为FPS(Canvas),使用WebGL渲染时,描述字段显示为FPS(WebGL)。
Sprite:
渲染节点数量(数字越低越好)。
Sprite统计所有渲染节点(包括容器),这个数字的大小会影响引擎节点遍历,数据组织和渲染的次数。
DrawCall:
DrawCall在canvas和WebGL渲染下代表不同的意义(越少越好)。
Canvas下表示每帧的绘制次数,包括图片、文字、矢量图。尽量限制在100之下。
WebGL
下表示渲染提交批次,每次准备数据并通知GPU渲染绘制的过程称为1次DrawCall,在每1次DrawCall中除了在通知GPU的渲染上比较耗时之
外,切换材质与shader也是非常耗时的 *** 作。 DrawCall的次数是决定性能的重要指标,尽量限制在100之下。
Canvas:
三个数值 —— 每帧重绘的画布数量 / 缓存类型为“normal”类型的画布数量 / 缓存类型为“bitmap”类型的画布数量”。
CurMem:仅限WebGL渲染,表示内存与显存占用(越低越好)。
Shader:仅限WebGL渲染,表示每帧Shader提交次数。
无论是Canvas模式还是WebGL模式,我们都需要重点关注DrawCall,Sprite,Canvas这三个参数,然后针对性地进行优化。(参见“图形渲染性能”)
第3节:内存优化
对象池
对象池,涉及到不断重复使用对象。在初始化应用程序期间创建一定数量的对象并将其存储在一个池中。对一个对象完成 *** 作后,将该对象放回到池中,在需要新对象时可以对其进行检索。
由于实例化对象成本很高,使用对象池重用对象可减少实例化对象的需求。还可以减少垃圾回收器运行的机会,从而提高程序的运行速度。
以下代码演示使用
相关知识可以去百度百科查看,那里有更详细的解释。善用搜索,善用百科、文库之类的知识资源平台。这里简单说一下HTML5,html5是一个规范,其最大的特点在于总结了历代HTML语言的特点,强化了html语言的功能性和可扩展性,把大部分可用的标签和属性做了统一和规范。
以往,各浏览器都是一家独大,夜郎自大,或多或少的都在“发明”一些自己觉得不错的标签和属性,导致,网页设计和制作一直没有一个良好的规范,html5就是把这些以往出现的各种语法和用法,取长补短的做了一次总结,同时,简约未来网页应用的发展趋势,添加了一些新的功能内容,可以说,使用html5+css+js就可以开发一个动态(数据库、缓存数据、动画等)的网站,在这以前,动态是需要使用asp、php、jsp等动态变成语言实现的。
可以说,html5是语义化、性能优化、体验优化的产物,相对于以往的html5版本,html5还算完美(目前处于草案阶段,具体的内容还有待完善和商榷)。
html5适合开发网页应用,这里的网页应用是狭义的网页应用(类似桌面应用程序),而且,目前,html5在智能手机端的应用是属于较为常见的,这得益于智能机的原始浏览器属性(webkit内核,google android和apple IOS都是webkit内核的浏览器)和其应用特性(主要还是流量限制,html5有应用缓存功能和本地数据库);
腾讯等一些优秀的互联网产品提供商也开始把自家的网页更新到了html5了(QQ邮箱的拖拽上传、腾讯微博的CSS3图片、QQ空间的标签语义化等),国内大部分的网页设计公司和团队,也逐渐开始设计和制作基于html5部分功能的网页和网站了;
可以说,html5是一个趋势,是一个向性能和体验看齐的规范化趋势。关于网上说的html5的“使命”是干掉flash(《HTML5和Flash之粗知浅见》),个人以为太过片面,放大了html5的某个功能而已。
在 OpenGL 或 WebGL 等低级别渲染中,通过逐帧地清理和绘制场景来执行渲染。实现渲染之后,需要优化游戏,以减少渲染的量,所需成本因情况而异。因为画布是一个 DOM 元素,它使您能够对多个画布进行分层,以此作为一种优化方法。本文将探讨对画布进行分层的合理性。了解 DOM 设置,从而实现分层的画布。使用分层进行优化需要各种实践。本文还将探讨一些优化策略的概念和技术,它们扩展了分层方法。选择优化策略选择最佳优化策略可能很难。在选择分层的场景时,需要考虑场景是如何组成的。大屏幕上固定物的渲染经常需要重用若干个组件,它们是进行研究的极佳候选人。视差或动画实体等效果往往需要大量的变化的屏幕空间。在探索您的最佳优化策略时,最好注意这些情况。虽然画布的分层优化需要采用几种不同的技术,但在正确应用这些技术后,往往会大幅提升性能。设置层在使用分层的方法时,第一步是在 DOM 上设置画布。通常情况下,这很简单,只需定义画布元素,将其放入 DOM 中即可,但画布层可能需要一些额外的样式。在使用 CSS 时,成功地实现画布分层有两个要求:各画布元素必须共存于视区 (viewport) 的同一位置上。每个画布在另一个画布下面必须是可见的。图1 显示了层设置背后的通用重叠概念。 设置层的步骤如下:将画布元素添加到 DOM。添加画布元素定位样式,以便支持分层。样式化画布元素,以便生成一个透明的背景。设置画布重叠堆栈在CSS 中创建一个重叠堆栈 (overlay stack) 可能需要少量的样式。使用 HTML 和 CSS 有许多方法进行重叠。本文中的示例使用一个 标签来包含画布。 标签指定了一个惟一 ID,它将样式应用于其子 HTML5 画布元素,如 清单 1 所示。清单1. 画布定位样式 #viewport { /** * Position relative so that canvas elements * inside of it will be relative to the parent */ position: relative} #viewport canvas { /** * Position absolute provides canvases to be able * to be layered on top of each other * Be sure to remember a z-index! */ position: absolute} 容器 通过将所有子画布元素样式化为使用绝对定位来完成重叠要求。通过选择让 #viewport 使用相对定位,您可以适应未来的发展,因此,应用于子样式的绝对布局样式将会是相对于 #viewport 容器的样式。这些HTML5 画布元素的顺序也很重要。可以按元素出现在 DOM 上的顺序进行顺序管理,也可以按照画布应该显示的顺序来样式化 z-index 样式,从而管理顺序。虽然并非总是如此,但其他样式可能也会影响渲染;在引入额外的样式(比如任何一种 CSS 转换)时要小心。透明的背景通过使用重叠可见性来实现层技术的第二个样式要求。该示例使用这个选项来设置 DOM 元素背景颜色,如 清单 2 所示。清单2. 设置透明背景的样式表规则 canvas { /** * Set transparent to let any other canvases render through */ background-color: transparent} 将画布样式化为拥有一个透明背景,这可以实现第二个要求,即拥有可见的重叠画布。现在,您已经构造了标记和样式来满足分层的需要,所以您可以设置一个分层的场景。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)