`

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

阅读更多

http://uh.9ria.com/space-109929-do-blog-id-7583.html

这节内容其实是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(大家可以自行测试,不同的电脑硬/软件环境测试的结果可能不一样)

以上对数据结构所讲的非常浅,如果大家要深入的学习数据结构,请买一本书好好研究一翻,这篇文章的目的是呼吁大家重视数据结构基础的学习。在我对我面试的一些人和身边的同事中了解得知大部分人对这些基础知识学习和使用经验非常少.如果要把握工程的整体性能,就应该把握好每个环节,并不是在某些方面做的非常突出,而在某些方面又做的不好,从而造成性能瓶颈

Flash高性能开发基础系列 ― 内存篇【上】

Flash高性能开发基础系列 ― 内存篇【下】

  • 大小: 15.7 KB
  • 大小: 21.2 KB
分享到:
评论

相关推荐

    用鼠标控制旋转的Flash 3D立方体.rar

    8. **调试与测试**:开发过程中,使用Flash的调试器和ActionScript编译器来确保代码无误,并进行性能优化。 9. **源文件分析**:压缩包中的“codesc.net”可能是源代码文件或相关资源,如果能查看这些文件,可以...

    Flash .net程序集

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

    flash as游戏编程

    Flash是由Adobe公司开发的一款广泛应用于创建动画、交互式内容和游戏的平台,而ActionScript(AS)则是Flash的灵魂,它是一种面向对象的脚本语言,让开发者能够赋予Flash项目动态行为和功能。 首先,让我们关注...

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

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

    as3 游戏开发基础

    【AS3游戏开发基础】 ActionScript 3.0(AS3)是Adobe Flash平台上用于创建交互式内容、游戏和应用程序的主要编程语言。AS3相比于早期版本有着显著的改进,包括性能提升、类型系统强化和更现代的编程模型,使得游戏...

    Flash程序员上机面试题目

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

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

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

    Flash_AS3.0例子

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

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

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

    Flash as3 相册

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

    Flash PHP编程宝典

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

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

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

    flash 歌词同步播放

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

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

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

    NetApp用户案例-新浪-IT基础架构回顾与展望

    NetApp的FAS系列存储系统因其高性能、高可用性和易于管理的特点,成为新浪IT架构升级的重要选择。 1.3 NetApp技术应用:NetApp的Data ONTAP操作系统提供了统一的存储管理,支持块和文件存储,能有效整合多种工作...

    flash as3 截图,拍照

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

    flashas3手册

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

    java新手上路flash教程

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

    flash 3D图片展示

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

    flash载入html

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

Global site tag (gtag.js) - Google Analytics