`

[转]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
分享到:
评论

相关推荐

    Flex企业应用开发实战源代码

    第2章 Flex企业应用开发基础 21 2.1 MXML语言 21 2.1.1 用MXML表示ActionScript对象 22 2.1.2 查看由MXML文件所翻译的ActionScript代码 24 2.1.3 IMXMLObject接口 25 2.2 客户端保持状态 28 2.3 客户端MVC 30 ...

    asp.net知识库

    技术基础 New Folder 多样式星期名字转换 [Design, C#] .NET关于string转换的一个小Bug Regular Expressions 完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Chrome Frame 会把最新版的Chrome Webkit 内核和JavaScript 引擎注入到IE中, IE浏览器将获得Chrome的性能和功能 目录 摘要 I ABSTRACT II 专业名词清单 III 第一章 绪论 1 1.1 研究背景与意义 1 1.2国内外相关...

    flex3的cookbook书籍完整版dpf(包含目录)

    在Flash中使用ContainerMovieClip创建Flex容器 21.3节.导入FlashCS3的组件 21.4节.认识Cairngorm小型结构 21.5节.创建Cairngorm视图、事件和模型 21.6节.创建Cairngorm命令和事务代理类 21.7节.创建...

    .net开源的综合开发框架wojilu框架.zip

    默认使用依赖注入容器和 AOP 容器,轻松支持二次扩展开发。丰富的缓存机制,支持对象透明缓存和页面多级缓存,超简单、超易用、可扩展。后台管理全部采用局部刷新技术。特别介绍:门户(CMS)可直接拖拽页面布局,页面...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    2.5.1 基于项目的开发 2.5.2 创建Web项目 2.5.3 迁移旧版Visual Studio创建的网站 2.6 Visual Studio调试 2.6.1 单步调试 2.6.2 变量监视 2.6.3 高级断点 2.7 WebDevelopment Helper 2.8 总结 第3...

    ASP.NET4高级程序设计(第4版) 3/3

    2.5.1 基于项目的开发 47 2.5.2 创建Web项目 48 2.5.3 迁移旧版Visual Studio创建的网站 49 2.6 Visual Studio调试 51 2.6.1 单步调试 52 2.6.2 变量监视 54 2.6.3 高级断点 55 2.7 WebDevelopment ...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    我记录网站综合系统 1.9.rar

    •默认使用依赖注入容器和 AOP 容器,轻松支持二次扩展开发。 •丰富的缓存机制,支持对象透明缓存和页面多级缓存,超简单、超易用、可扩展。 •后台管理全部采用局部刷新技术。 •可以和 asp.net webform/mvc ...

    QuickTime 视频播放器 QuickTime Pro 7.7.9 中文版.zip

    不论你正在制作在 Web 上播送的内容,还是作为软件开发人员的你想要将你的应用程序提升到更高的层次,QuickTime 都能提供业界最全面的平台。QuickTime 拥有值得你信赖的稳若磐石的基础和众多的创新功能,为你的消费...

    ExtAspNet_v2.3.2_dll

    -为容器控件(比如Panel,Region,Tab等)增加AJAX属性IFrameUrl(feedback:BluesT)。 -重新设计模拟树的下拉列表的实现,避免选中某项后的闪烁。 +2009-11-21 v2.1.5 +Tree优化。 -修正Expanded项和Checked...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -为TreeNode增加AutoPostBack属性,增加事件数据类TreeCheckEventArgs,为Tree增加事件NodeCheck。 -示例在:http://extasp.net/data/tree_run.aspx -Grid增加GetNoSelectionAlertInParentReference函数,用来...

Global site tag (gtag.js) - Google Analytics