`
wgcode
  • 浏览: 591488 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Flash高性能开发基础系列―数据容器

阅读更多

这节内容其实是AS版数据结构与算法,AS中性能瓶颈在主要渲染,所以大部分开发人把优化精力放在渲染从而忽略在数据层的优化。不同的数据组织(数据结构)直接影响你的数据操作效率,在大多量语言中都提供丰富的对象容器,比如java中的Set,Map,Array,Queue等等,其中封装了大量的针对于某种数据结构的操作方法,从而大大提高了数据操作效率和开发效率,as3内置的线性结构Array一种,大家也别无选择。在数据量不是很大的时候数组和其它数据结构的差异体现的不是很明显,但是如果你对大量数据进行删除和插入,这时候你的可能需要考虑其它的数据结构,比如:链表。

我们来了解一个不同的数据结构有什么不同的特性,如果你大学学的数据结构没有遗忘的话你可以不用看这一段文字。任何一种存储结构都有他的优点和缺点.下面我们来具体的特性:

 



 

 

AS3没有内置这些数据结构,但是我们可以选择第三方库,最著名的就是国外一个人写的polygonal,但是polygonal存在一些严重问题,我的有一篇日志详细说明(http://uh.9ria.com/space-109929-do-blog-id-7310.html),我们采用另一款数据结构库ASDS做demo(这里下载http://code.google.com/p/dsforas/)。

    我来举一个简单的游戏实例来说明游戏中数据组织的重要性,假如我们在斗地主游戏中服务器给我们发牌或出牌我们必须保证手中的牌都是有须的,如3,4,5,6,........;我们一般的做法只就是将所有的牌存在一个数据中,然后将向数组中进行插入数据。

 

 public function insert(index:uint,o:*):Void{

            var size:int=_array.length;

          if(index>sizereturn;

          for(var i:int=size;i>index;i--){

              _array[i]=_array[i-1];

          }

         _array[index]=o;

}

在数组中每做一次插入是将插入位置以后的数据向后移动腾出空间后再写入指定数据,在移动数据的过程中消耗了大量时间。


 

假如我们采用链表的存储方式,由于链表(如果不知道什么是链表可以去百度是查一下,我这里不重复)的结构特性所以插入效率非常高,具体的我看图吧.



 

 

 

以上只是理论,我们来做一个效率测试吧.

package {

       import asds.list.LinkedList;

       import flash.display.Sprite;

       public class Demo extends Sprite{

            private var _array:Array=[]

            private var _linked:LinkedList=new LinkedList(10000);

            public function Demo(){

                for(var i:int=0;i<10000;i++){

                    linked();

                    array()

                }

            }

            private function linked():void{

                _linked.addAtFirst(0);

            }

           private function array():void{

               insert(0,0);

           }

           public function insert(index:uint,o:*):void{

               var size:int=_array.length;

              if(index>size) return;

              for(var i:int=size;i>index;i--){

                  _array[i]=_array[i-1];

              }

            _array[index]=o;

        }

   }

}

以上是一个插入测试,分别对数组和对链表进行1w次插入00位置,profile中看到调用array()linked()消耗总时分别为24980毫秒和102毫秒,做这种操作linked24(大家可以自行测试,不同的电脑硬/软件环境测试的结果可能不一样)

以上对数据结构说的非常浅,如果大家要深入的学习数据结构,请买一本书好好研究一翻,这篇文章的目的是呼吁大家重视数据结构基础的学习。在我对我面试的一些人和身边的同事进行的了解得知大部分人对这些基础知识学习和使用经验非常少.并不是在某些方面做的非常突出,而在某些方面又做的不好,从而造成性能瓶颈,要写出高性能代码,就得在各个方面都做好。

 

  • 大小: 36.6 KB
  • 大小: 11.2 KB
  • 大小: 17.6 KB
分享到:
评论

相关推荐

    Flash .net程序集

    尽管它与Flash密切相关,但Shockwave通常支持更复杂的功能和更高的性能。 6. **开发Flash播放器应用**:使用这些.NET程序集,开发者可以创建自定义的Flash播放环境,比如一个桌面应用或者Web控件,能够完全控制...

    flash as游戏编程

    通过这些实例,你可以了解到如何运用AS 3来创建动态角色、设置游戏规则、处理用户输入,并且可能还包括了一些高级技巧,如优化性能、使用骨骼动画或者与服务器进行数据交换。 总之,学习“Flash AS游戏编程”意味着...

    ADOBE FLEX 和 ADOBE FLASH BUILDER 开发手机应用程序

    Flex 4.5 提供了一些关键特性和最佳实践来帮助开发者构建高性能的移动应用。 - **持久化机制**:在移动应用中保存用户数据非常重要。Flex 4.5 支持多种持久化策略,包括本地存储和数据库访问。 - **屏幕适配**:...

    Flash程序员上机面试题目

    1. **ActionScript3基础**:这是所有Flash程序员的基础,包括变量、数据类型、操作符、流程控制(如条件语句和循环)、函数的定义和调用等。 2. **面向对象编程**:ActionScript3是完全面向对象的语言,理解类、...

    Flash游戏编程基础教程6-10

    在本“Flash游戏编程基础教程6-10”中,我们将深入探讨Flash平台上的游戏开发技术,特别是使用ActionScript这一强大的编程语言。ActionScript是Adobe Flash Professional和Flash Player中的核心,用于创建交互式内容...

    Adobe Flash 11 Stage3D游戏编程初学者指南 代码

    Stage3D是ActionScript 3.0的一个部分,它提供了一个直接与GPU(图形处理单元)交互的接口,允许开发者创建高性能的实时图形应用,如游戏。Stage3D提供了类似于OpenGL和DirectX这样的底层图形API,但特别针对Flash ...

    Flash as3 相册

    总结,Flash AS3 相册的制作涵盖了图形设计、编程、数据处理等多个方面,是学习Flash开发和AS3语法的绝佳实践项目。通过不断探索和实践,可以创造出独具特色的互动相册,为网页增添更多生动和趣味性。

    Flash_AS3.0例子

    13. **游戏开发基础**:通过简单的游戏实例,学习游戏循环、碰撞检测、计分系统等基本游戏编程概念。 14. **粒子系统**:利用ParticleEmitter类创建动态的粒子效果,如烟雾、火花等,提升视觉表现力。 15. **物理...

    Flash PHP编程宝典

    1. ActionScript 3基础:AS3是Flash开发的主要脚本语言,它的语法、数据类型、变量、函数以及面向对象编程的概念是学习的基础。 2. Flash图形和动画:了解如何使用AS3绘制图形、制作动画,以及如何控制时间轴和帧率...

    flash 歌词同步播放

    使用ActionScript 3.0编写的应用程序具有更高的性能和更严格的面向对象编程结构。 首先,我们来看看ActionScript 3.0的核心知识点。ActionScript 3.0是一种强类型、面向对象的脚本语言,它的语法与ECMAScript...

    flashas3手册

    AS3是开发互动内容、游戏和富互联网应用(RIA)的强大工具,其语法严谨,性能优秀,支持面向对象编程。 在AS3中,我们首先会遇到基本的语法结构,如变量声明、数据类型(包括Number、String、Boolean、Object等)、...

    java新手上路flash教程

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而著名。对于初学者来说,理解和掌握Java的基础知识是至关重要的。本教程“java新手上路flash教程”旨在通过生动的Flash动画形式,帮助初学...

    新智能制造时代数据驱动的多云架构.pptx

    例如,IBM的FlashSystem系列提供了高性能的全闪存存储,而IBM Storwize和Cloud Object Storage则为企业提供了不同层次的云存储解决方案。 企业可以通过私有云实现应用的现代化和敏捷开发,利用Docker和Kubernetes等...

    新智能制造时代数据驱动的多云架构.pdf

    高性能计算和高效的存储管理是关键,它们能够快速分析生产过程中产生的海量数据,帮助企业实现精细化管理和预测性决策。例如,通过引入人工智能(AI)技术,企业可以实现智能化的质量控制和检测,提高产品的良品率,...

    flash as3.0射击游戏

    4. **ActionScript 3.0框架**:Flash Player提供了强大的内置库,如DisplayObject容器、Sprite和MovieClip,它们是创建游戏图形和动画的基础。开发者可以利用这些类来创建游戏对象,如飞机、子弹和敌人。 5. **数据...

    flash as3 截图,拍照

    AS3是Flash Professional和Flex Builder等开发工具中的主要编程语言,它提供了面向对象的编程能力,具有更高的性能和更严谨的语法。AS3中的一切都是一个对象,包括舞台(Stage)和显示列表。 2. **舞台(Stage)...

    flash 3D图片展示

    在IT领域,Flash是一款历史悠久且曾经非常流行的交互式多媒体开发工具,主要用于创建动画、图形、交互式内容以及网络应用程序。本资源"Flash 3D图片展示"是基于Flash 9.0版本的一个项目,它展示了如何利用Flash的...

    flash载入html

    它与CSS(Cascading Style Sheets)和JavaScript一起,构成了现代网页开发的三大核心技术。HTML可以包含文本、图像、链接等元素,并通过CSS进行样式定义,JavaScript则负责添加动态功能。 “Flash载入HTML”的技术...

    windows编程案例--Flash MediaPlayer

    除了基本的播放控制,还可以利用Flash Player的ActionScript接口,通过传递数据和调用方法来实现更高级的交互。例如,C++程序可以设置Flash变量,或者调用ActionScript中的函数,实现C++和Flash之间的双向通信。 五...

Global site tag (gtag.js) - Google Analytics