网页游戏,尤其是多人同时在线的即时战斗webgame,性能优化是开发过程中、开发后期必然遇到的问题。历经磨难,总结出了一个最佳实践:延迟策略。其实说白了,就一句话:不要在一帧里做太多事。然后展开总结一下。
理解Flash Player的异步单线程
首先我们应该理解Flash Player的异步单线程机制。当然,最近刚出现的新版本FP的多线程API除外。FP的单线程表现在,我们可以控制的线程只有一个,这个线程可以以帧循环来表现出来。跑道模型告诉我们,每帧都会运行一些代码,然后进行渲染。那么哪些代码在哪一帧执行?这是通过事件机制来支撑的。通过“异步”地派发事件,来完成动画的渲染。例如我们在某个时刻创建一个Loader对象,并下载一张图片。这时主线程继续执行,FP会创建新的线程,来完成下载,然后派发一个Event.COMPLETE事件,通知主线程做处理。
插一句,这一点有点像JavaScript的运行机制。JavaScript也是单线程来运行代码,把代码分割成小的代码片段,一点一点执行。Ajax异步请求,就好比Flash里的Loader,只不过Ajax XMLHttpRequest是浏览器直接开放的接口,Flash Loader是浏览器插件开放的接口而已。
网页游戏的动画实现
网页游戏中通常会添加ENTER_FRAME事件,每帧去检测数据的变更,然后完成各种功能和动画。这就好比一个故事,有两条“时间线”,一条是数据,一条是执行。我们随时改变数据,然后等待下一个ENTER_FRAME去执行,来完成动画。例如我们给角色的当前动作设置成“行走”,那么下一帧进入的时候,用一些代码把角色位图换成行走,直接赋值bitmapdata即可。
性能瓶颈的起因和优化
假如某一个ENTER_FRAME的处理需要太长的时间,超过了一帧的时间,那么性能瓶颈就来了。下面的代码可以说明问题:
private function onEnterFrame(e:Event):void { frameCount++; trace(frameCount, flash.utils.getTimer() + "ms"); // so heavy for (var i:int = 0; i < 100000; i ++) { var s:Sprite = new Sprite(); addChild(s); } }
输出:
1 324ms 2 1833ms 3 3019ms 4 4569ms 5 7344ms
每帧的间隔都超过了1秒……方法执行之间太长,而FP又是单线程,这就导致ENTER_FRAME事件不能按照原定的时间去派发。帧的时间被撑开,导致帧频降低。人眼能分辨的最小时间片约为100ms,按这样计算的话,按最好的“数据”和“执行”的协调情况,帧频降低到10,必然会感觉卡。
显而易见,解决办法来了。不要在一帧里干太多事儿!在一般的情景中,例如其他玩家的出现、怪物行走等,实时性要求并不高。一个很常见的例子就是,刚进入一个场景,而周围有50只怪物。服务器会把50只怪物的信息一次性通通发给前端,而我们如果在一帧内完成50只怪物的初始化和渲染,恐怕这一帧要撑大了。我们可以把这些怪物缓存起来,再监听一个ENTER_FRAME事件,每帧处理5只怪物。
再插一句,这里又有点像JavaScript。JS里setInterval之后,如果某个代码片段执行时间过长,那么设置的interval就不准了。一样一样的。
结论
帧频25的情况下,一帧的时间只有宝贵的40ms。这要求我们每一毫秒都不能滥用。平时我们说的那些AS3语言方面的性能,例如用移位来取整,用Vector代替Array,往往不是性能的瓶颈所在。把大量操作分割成若干部分延时处理,是网页游戏性能优化的最佳实践。
本文转载自:http://jsfox.cn/blog/webgame/webgame-cpu-optimization-method-lazy-render-stratogy.html
相关推荐
Oracle数据库性能优化最佳实践 在IT领域,Oracle数据库作为企业级数据管理的首选方案,其性能优化至关重要。本文旨在深入探讨Oracle数据库性能优化的最佳实践,包括数据库性能基础、调优方法论、SQL语句调优以及...
以下是一些常见的前端性能优化策略: **2.1 延迟渲染** - **2.1.1 挑战和困难**:某些情况下,由于页面内容过多或资源过大,页面加载速度变慢。 - **2.1.2 解决方案**:通过将非关键资源延迟加载来加快页面的初次...
这两本指南——《高性能网站建设指南》和《高性能网站建设进阶指南:WEB开发者性能优化最佳实践》将为我们揭示解决这些问题的关键策略。 首先,我们来探讨《高性能网站建设指南》中的核心概念。这本书强调了“速度...
《高性能网站建设进阶指南:Web开发者性能优化最佳实践》是由口碑网前端团队翻译的一本专业书籍,旨在为Web开发者提供一套全面的性能优化策略。在当前互联网环境下,网站的性能对于用户体验至关重要,优化网站性能...
ASP.NET性能优化最佳实践是软件开发中的重要环节,尤其是在构建大型、高性能的Web应用程序时,这一环节显得尤为关键。ASP.NET作为一个强大的Web开发框架,提供了许多内置功能来帮助开发者优化应用性能。以下是一些...
### 软件性能优化最佳实践 #### 一、引言 随着信息技术的快速发展,软件系统面临着越来越多的挑战,特别是高并发、大数据等场景下的性能问题。为了提升系统的整体性能和用户体验,软件性能优化变得至关重要。本文将...
然而,在生产环境中,HBase的读写性能优化是一个比较复杂的问题,尤其对于读延迟的优化更是需要精心设计和调优。下面我们将根据标题和描述中提到的关于HBase读性能优化策略进行详细的知识点阐述。 首先,FullGC异常...
**PostgreSQL最佳性能优化实践** 在数据库管理领域,PostgreSQL是一种功能强大且开源的关系型数据库管理系统,被广泛用于处理各种规模的数据存储和处理任务。本资料集“PostgreSQL最佳性能优化实践授课PPT 386页”...
《高性能网站建设进阶指南》是一本专为WEB开发者设计的性能优化手册,旨在帮助开发者们构建更快、更稳定、更高效的网站。这本书深入探讨了JavaWeb和Java在网站开发中的应用,结合实际案例,提供了丰富的优化策略和...
总结起来,"高性能网站建设进阶指南:WEB开发者性能优化最佳实践"这本书会涵盖一系列提升Web性能的策略和技术,包括但不限于网络协议、资源管理、代码优化、用户体验设计和性能监控。通过学习和应用这些最佳实践,...
### 数据库性能优化最佳实践 #### 一、数据库性能评估 **1.1 概述** 数据库性能评估是确保数据库高效稳定运行的关键步骤。通过对数据库性能的全面评估,可以识别出潜在的问题点,并据此制定相应的优化策略。评估...
企业磁盘网络性能优化最佳实践是提升企业信息系统效率的关键环节,尤其对于大数据处理、数据库服务、云计算等场景至关重要。本文将深入探讨如何评估和优化这两个关键领域的性能。 一、前言 磁盘网络性能优化旨在...
本文主要探讨了HBase服务器端的读性能优化策略,这些策略可以帮助解决读延迟大、资源消耗高和负载不均衡等问题。以下是针对四个关键优化领域的详细说明: 1. **读请求均衡优化**: - 原理:读请求不均衡可能导致...
在现代的互联网环境中,网页性能优化是提升用户体验和网站竞争力的关键环节。"WEB性能优化实践分析"的主题旨在探讨和分享一系列实用的优化策略和技术,旨在遵循"web优化黄金规则",确保网页快速加载,减少用户等待...
以下是对"MySQL性能优化的21个最佳实践"的详细阐述: 1. **查询优化**:编写高效的SQL语句,避免全表扫描,使用JOIN操作时要谨慎,尽量减少子查询,利用EXPLAIN分析查询执行计划。 2. **索引优化**:为经常用于...
首先,前端性能优化的基础在于理解网页加载流程。当用户访问一个页面时,浏览器会解析HTML文档,构建DOM树,然后根据CSS和JavaScript来渲染页面。优化此过程可以显著减少页面加载时间。 1. **懒加载**:对于非首屏...
### SQL Server 2008性能优化实践探究 #### 一、优化设计逻辑数据库和表 在当前信息时代背景下,数据库的应用已经渗透到了生产生活的各个方面。对于SQL Server 2008这类关系型数据库而言,其性能表现直接影响着...
在Vmware环境下配置Microsoft Exchange的最佳实践涉及多个方面,包括选择合适的硬件平台、优化虚拟机配置、合理规划存储方案以及制定周密的实施策略。通过遵循这些指导原则,企业不仅可以提升Exchange的性能和可靠性...
这篇文档主要针对的是在VMware环境下FusionStorage的性能优化和最佳实践,旨在最大化利用FusionStorage的性能,确保在VMware平台上的高效运行。 **一、FusionStorage系统特性** 1. **分布式架构**:FusionStorage...