`

关于ActionScript的效率(转)

阅读更多

随着Flash的ActionScript功能的不断强大,使用Flash制作应用程序也越来越多了,但让众多AS程序员最头疼的就是Flash的程序处理效率太低,就算现在flashplayer7虽然效率比flashplayer6提高了2~8倍,但还是低的要命,尤其是在手持设备中就更加严重了(在PPC上现在Flash2004的所有组件都没法使用,需要自行开发),这样就让很多as程序员不断的研究比较action中哪个方法效率更高,哪条指令更快.甚至有些人只用while循环而不用for循环(因为很多测试表明while循环比for循环要快一点),但这种做法实际上没快多少确让程序读/写起来都要麻烦许多,其实真正提高程序的效率,不是比较类似while for循环哪个更快,而是要找到程序效率低的瓶颈

一段程序的效率,最关键的看算法,就算用最快的计算机语言(比如用c),如果算法不好,大部分执行时间都是被浪费掉了,而不是充分利用起来,那程序一样会很慢,而如果算法得当,可能解决问题根本就不用很大量的计算,因此即使使用效率很低的action一样能很快的解决(虽然action很慢,但每秒一样能循环循环几十万次,同样能在很短的时间内完成很多事情,所谓慢是比较更快的程序语言来说的)

在这里咱们不谈算法,单独从FlashPlayer上说,怎么才能提高action的效率呢?要提高效率就要抓住根本,抓住Flash为什么运行的慢,action执行效率低,最根本的原因是action是解释性语言,每句代码都需要flashplayer去解释执行,这就是action执行效率低的根本原因,那如果去提高action的效率呢?去比较哪句action的效率更高吗,所有的action都是player去解析的,肯定相差不大,那怎么办呢?当然就是尽量少使用action进行处理

大家都知道FlashPlayer是用c语言来写的,那flash里面的所有内置函数肯定都是使用c语言实现的(虽然flash执行action的速度比较慢,但flash的内置函数确实非常快的,比如flash下Math下面的方法都是效率很高的),那我们如果能把我们原来用action来处理的方法改用flash内部方法来处理就肯定要快多了

那怎么才能使用内置方法代替action呢,这个要看个人水平跟对Action的熟悉程度了,下面介绍一个例子,来解释一下:

action程序员都知道action处理String的效率是非常低的,可是说低的可以,下面代码可以说明:

var str = "abcde";
var tmp = "";
var time1 = getTimer();
for(var i=0;i < 10000;i++){
tmp += str;
}
trace(getTimer() - time1);//1665

将10000个5个字母的字符串连接起来竟然需要1.5s以上的时间(cpu: pm1.4)
而改成10个字母就需要使用4s左右的时间,15个字母就需要5.5s左右的时间
随着字符串的变长,字符串处理的速度越来越低

那怎么能让字符串连接的更快呢?看一看下面这段代码:

time1 = getTimer();
var tmpA = new Array();
for(var i=0;i < 10000;i++){
tmpA[i] = str;
}
var tmp1 = tmpA.join("");
trace(getTimer() - time1);
trace(tmp1 == tmp);

这段代码是接在上面的代码后面的,这里思路有所不同的是,在这里先把字符串一个一个的付给数组,然后利用数组的join方面一下子将整个数组转换为字符串,你也许会想,先付给数组,然后再有数组转换,肯定会更慢.但实际上不是这样的,因为赋值语句在as里面是很快的,所以将10000个字符串付给数组花不了多长时间,而最后调用的数组的方法是as内部函数,完全有c实现的,因此肯定要比as实现快很多倍,因此整体速度跟上面的代码就相差很多了,而且随字符串增长,效率也不会明显降低,下面是执行结果:

同样为10000个字符串连接,5个字符第二种方法只需要140ms,比直接连接字符串快10倍左右,而后面的比较输出true说明两个字符串是一样的
而且当字符串加置10个,15个甚至更多的时候,效率并没有降低,而仍然用时140ms左右,而当字符串长度达到40的时候,用时才超过了200ms关于ActionScript的效率(转)

分享到:
评论

相关推荐

    ActionScript 3.0 概要.doc

    ActionScript 3.0 概要.doc Actionscript 3.0 演变成一门强大的面向对象的编程语言意味着flash平台的重大变革。这种变化也意味着 ...拥有 Actionscript 3.0, 开发者可能达到高效执行效率和表现同一的平 台。

    ActionScript 3.0实现PurMVC地图编辑器.src.zip

    1、地图编辑器; 2、purMVC示例,有封装和重写,方便管理; 3、MornUI示例; 4、资源管理;...5、自定义事件,有优化处理,提高效率; 6、Adobe Air的本地资源处理; 7、JSON输入输出解码配置文件;

    ActionScript3.0经典教程

    功能也越来越强大,运行效率也越来越高。这些发展不禁另我们为之震惊。现在很多人都开始学习 ActionScript3.0, 制作这样的书籍也是迫在眉睫,所以我们将在这本书中引入大量的经典教程供大家学习!  好了!多余的话...

    ActionScript 3.0 开发人员指南中文官网上下的

    我从Adobe官网上下载来的中文的《ActionScript 3.0 开发人员指南》,对于一个想要进入AS的和已经进入AS的开发者们来说都是不错的文档,教你怎么从入门到开发出一款完整的AS程序。看看绝对有好处。Adobe官方的帮助...

    基于ActionScript3语言的组件库架构研究

    通过软件工程中样式展现与逻辑处理相分离,构建一套完整的组件库,该组件库可以使程序开发人员与美术人员的工作不再相互依赖,让频繁的需求变更不再过多的影响到项目开发的进度,有效提高前端Flash界面组件的开发效率和...

    Papervision3D

    尤其是去年ActionScript 3发布了之后,ActionScript的效率得到了大幅度提升,基于此的Papervision3D无论是在效率、功能上都有了很大的提高。随着现在Web 2.0、Web-Game及休闲类竞技网络游戏的发展,相信Papervision...

    Flex中如何利用videoPlayer属性和mx_internal命名空间,清除VideoDisplay控件内容

    能够清除flex视频缓存,提高播放效率,提高用户的体验度

    FlashBuilder3快捷键 FlashBuilder4快捷键

    FlashBuilder3 FlashBuilder4 各种快捷键 方便使用 提高开发效率

    AS3雪球游戏

    但是一直以来,运行效率一直是Flash的核心问题与技术瓶颈。这篇文章会通过一个雪球粒子的例子来给大家介绍一个开发思路,一个如何使用位图来高效实现运算的思路。 需求 我们现在要做一个比较好玩儿的雪球效果,在...

    《Papervision3D Essentials》中文(上)

    尤其是去年ActionScript 3发布了之后,ActionScript的效率得到了大幅度提升,基于此的Papervision3D无论是在效率、功能上都有了很大的提高。随着现在Web 2.0、Web-Game及休闲类竞技网络游戏的发展,相信Papervision...

    cocoaAMF使用指南.zip

    AMF协议是Adobe公司自己的协议,主要用于数据交互和远程过程调用,在功能上相当于WebService,但是AMF与WebService中的XML不同的是AMF是二进制数据,而XML是文本数据,AMF的传输效率比XML高。AMF使用HTTP方式传输,...

    基于Fl ash 流媒体技术的动态播放列表设计

    本文阐述了如何通过ActionScript 与XML 实现基于Flash 流媒体服务器、易于修改重用的动态播放列表, 用户 可以使用XML 文件方便地更新播放列表, 而不需要开发者制作复杂的后台管理页面, 大大提高网络流媒体内容的维护...

    [Dreamweaver、Photoshop、Flash网页制作与网站建设精粹(视频精讲版)].王雪荣等.扫描版

    Dreamweaver CS5.5创建基本文本网页,使用图像和多媒体制作丰富动感的网页,创建网页链接,使用表格和框架排版布局网页,用CSS+Div灵活布局页面,使用模板和库提高网页制作效率,利用行为和脚本制作动感特效网页,...

    hprose 1.3文档

    您还在为传统分布式系统开发的效率低下运行不稳而痛苦吗? 好了,现在您有了Hprose,上面的一切问题都不再是问题! Hprose (High Performance Remote Object Service Engine) 是一个商业开源的新型轻量级跨语言跨...

    Dash for Mac 2.0.2 文档查看神器 破解版

    iOS OS X .NET Framework Man Pages ActionScript Akka Android AngularJS Ansible Appcelerator Titanium Arduino Backbone Bash Boost Bootstrap Bourbon Bourbon Neat C C++ CakePHP Cappuccino Chai Chef ...

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

    3.15 节使用延迟实例化提高启动效率 3.16 节创建并控制可调整大小的容器 3.17节在TabNavigator内创建、启用和禁用TAB组件(TabControls) 3.18 节使用可关闭Tabs 创建一个TabNavigator 3.19 节创建和控制Alert 3.20 节...

    pylash_engine:适用于Python的轻巧轻松的游戏引擎

    Pylash采用了类似于ActionScript的界面设计,以提高游戏开发的效率。 轻巧。 Pylash没有附带大量的第三方工具和框架。 全面性。 Pylash是一个通用框架,并提供各种面向对象的界面,包括图像显示,文本和矢量图形,...

    Cairngorm 中文手册

    在Cairngorm基础上开发RIA, 将会在大大提高开发和维护的效率。 Cairngorm本身并不是一个完整的企业应用, 它只是提供了一个开发的骨架, Adobe称之为体系.在这个体系中包括以下几个部分: 1. Business(业务逻辑...

    SuperMap_iClient_6R(2012)_for_Realspace(Flex)专题1

    1.1.2高运行效率的 UGC 内核和简易脚本开发环境的结合 SuperMap iClient 6R (2012) for Realspace (Flex)基于

    EvalVM:一个基于 AS3 的 JavaScript 脚本编译解释器,FlashPlayer运行时执行eval操作,脚本与AS3类、变量互通

    EvalVM致命缺陷: iOS下不支持此脚本系统,未编译的代码禁止被加载(苹果真是恶心啊,据说iOS8...Eval的效率是原生的1/20左右(有可能不准确,请参看最新的测试),不过用来做游戏的脚本系统,足够了。虽然lua的效率接

Global site tag (gtag.js) - Google Analytics