我的编程空间,编程开发者的网络收藏夹
学习永远不晚

AS3性能优化

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

AS3性能优化

本篇文章用来总结本人对AS3性能优化方面的认识及经验,可能会有一些错误,敬请不吝赐教.如果想了解更多,请参考ADOBE方面的相关只是介绍.

1,关于显示对象:

    shape -> sprite -> moviechip

我之所以这样写,是因为: 从shape到moviechip成本逐步增高.如果显示对象不要求是容器,交互对象,最好用shape;moviechip与sprite的区别是,moviechip有一个时间轴的概念.如果不需要动画的话,请使用sprite.

2,关于集合:

var $arr : Array = [];
var $obj : Object = {};

比:

var $arr : Array = new Array();
var $obj : Object = new Object();

效率更高.另外关于遍历,for each , for  while效率由高到低.

for( var $key : * in $obj )


for( var $key : string in $obj )

的效率高.这里必须指出,i+=1 的效率大于i++ ,int > number > uint.对于while,倒序的效率更高

var $index : int = $arr.lenght;
while($index-=1 > -1){
}

对于vector,如果存储的数据元素比较大,建议用vector,它的效率最高尤其是存储数量比较多的数据时.另外如果知道要存储多少数据,最好是用:(假设知道有20个MyClass对象)这样效率会进一步提高.

var $vec : Vector.<MyClass> = new Vector.<MyClass>(20);

3,关于对象池:

缓存一些相同的对象,以便于随时调用.这里强调一些事情:

    ①:缓存的对象数目:很对情况下,读段时间这个对象可能要用10个,可能要8个,可能12个...估计一个出现最多的数目.

    ②:一段时间后dispose掉多余的对象,以释放内存.比如你设置缓存10个对象,但是本局破天荒要用15个对象,你new了一些对象以凑成15个对象.但是用完后,要dispose掉5个对象.因为要用15个对象很少出现.

    ③:当不用这些对象时,dispose所有的对象.null掉集合(用来存储这些对象)

这样可以保证空间和时间的平衡.new的成本太高了.

4,关于["myChild"]:

    关于"[]"尽量不要用,效率不行,以前用的屁颠屁颠的,哎.使用.或者getChildByName方法就好.嗯,说一下个人的经历:在一个MC上的第n帧有个元件打个比方是mc,此mc从第n帧到第n+m帧做一个补间动画.你用[]的话,只有在n或者n+m(关键帧)上才能获取mc(MC["mc"])但是MC在播放,这玩意很不稳定.用getChildByName在补间动画当中的帧上也能获取到mc.

5,关于滤镜:

    我把原理说一下:对A进行滤镜.先对A进行副本a,对副本a进行滤镜.30秒后,如果没有对A进行滤镜修改则dispose掉A(这些电脑自动进行).再修改filter,对a计算原件aa,对aa进行滤镜.这回知道滤镜多么的坑爹了吧.如要滤镜效果,还是用Flash做一个,他不会产生多余的东西(副本).

6,关于自定义事件和CallBack(回调函数):

    首先必须说明CallBack完胜自定义事件.也就是说能用CallBack解决的话,绝对不要用Event.CallBack就是一个类引用了另一个类的方法地址,调用的话,直接上内存.而Event,那么多的参数,触发后还得到处找target(注册目标).但是,你不能满脑子都想用callback,对Event置之不理,有的时候,CallBack无法办到,那还得用Event.

7,useCapture = true:

    如显示对象不做任何修改,移位,缩放,旋转.用useCapture = true能提高性能.但是如做出修改则适得其反.最好自己做缓存BitMapData

8,尽量少调用函数:

    getter name() : string 和 settet(value:string):void 比 publie var $name的效率低.调用函数的成本高,当然这更符合OOP的思想,但不利于性能......还是用public字段吧.

9,关于显示对象的visible

    很多时候,AS3程序员都喜欢把不用的显示对象设为visible = false,这是可以的.但是从Flash Player方面来讲,Visible = false任然值得它去绘制,它比较笨.木有办法,那优化的方案就是,将其移出舞台了.

10,像素处理优化:

当绘制像素时,使用BitmapData 类的相应方法即可进行一些简单优化。快速绘制像素的一种方式是使用 setVector() 方法:

// Image dimensions 
var wdth:int = 200; 
var hght:int = 200; 
var total:int = wdth*hght; 
// Pixel colors Vector 
var pixels:Vector.<uint> = new Vector.<uint>(total, true); 
for ( var i:int = 0; i< total; i++ ) 
{ 
// Store the color of each pixel 
pixels[i] = Math.random()*0xFFFFFF; 
} 
// Create a non-transparent BitmapData object 
var myImage:BitmapData = new BitmapData ( wdth, hght, false ); 
var p_w_picpathContainer:Bitmap = new Bitmap ( myImage ); 
// Paint the pixels 
myImage.setVector ( myImage.rect, pixels ); 
addChild ( p_w_picpathContainer );
如果使用的是较慢的方法,如 setPixel() 或 setPixel32(),请使用 lock() 和 unlock() 方法加快运行速度。在以下代码中,使用了
lock() 和 unlock() 方法来改进性能:
var buffer:BitmapData = new BitmapData(200,200,true,0xFFFFFFFF); 
var bitmapContainer:Bitmap = new Bitmap(buffer); 
var positionX:int; 
var positionY:int; 
// Lock update 
buffer.lock(); 
var starting:Number=getTimer(); 
for (var i:int = 0; i<2000000; i++) 
{ 
// Random positions 
positionX = Math.random()*200; 
positionY = Math.random()*200; 
// 40% transparent pixels 
buffer.setPixel32( positionX, positionY, 0x66990000 ); 
} 
// Unlock update 
buffer.unlock(); 
addChild( bitmapContainer ); 
trace( getTimer () - starting ); 
// output : 670

BitmapData 类的 lock() 方法可以锁定图像,并防止引用该图像的对象在BitmapData 对象更改时进行更新。例如,如果

Bitmap 对象引用BitmapData 对象,则可以锁定BitmapData 对象,对其更改后再解锁。在BitmapData 对象解锁之前,

Bitmap 对象不会更改。要提高性能,请在对 setPixel() 或 setPixel32() 方法进行多次调用之前和之后使用此方法及 unlock() 方

法。调用 lock() 和 unlock() 可防止屏幕进行不必要的更新。

注: 如果处理的是位图 (而不是显示列表)中的像素 (双缓冲),有时该技术不会提高性能。如果位图对象没有引用位图缓冲

区,则使用 lock() 和 unlock() 不会提高性能。Flash Player 检测到未引用缓冲区,并且位图不会呈现在屏幕上。

遍历像素的方法 (例如 getPixel()、getPixel32()、setPixel() 和 setPixel32())可能速度很慢,特别是在移动设备上。如果可能,

请使用在一次调用中检索所有像素的方法。要读取像素,请使用 getVector() 方法,它比 getPixels() 方法速度快。此外,请记

住,尽可能使用依赖于Vector 对象的API,因为它们的运行速度可能更快。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

AS3性能优化

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

AS3性能优化

本篇文章用来总结本人对AS3性能优化方面的认识及经验,可能会有一些错误,敬请不吝赐教.如果想了解更多,请参考ADOBE方面的相关只是介绍.1,关于显示对象:    shape -> sprite -> moviechip我之所以这样写,是因
2023-01-31

Flash AS3 性能优化

Adobe 官方性能优化文档,很全面,非常好!http://help.adobe.com/zh_CN/as3/mobile/index.html http://www.rozengain.com/blog/2007/05/01/some-a
2023-01-31

服务器性能优化之网络性能优化

今天分享一篇后台服务器性能优化之网络性能优化,希望大家对Linux网络有更深的理解。

MySQL-性能优化

有志者,事竟成 文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。 文章目录 前言一、优化简介二、优化
2023-08-17

Android性能优化之网络优化

在移动互联网的快速发展环境下,手机用户日益对网络的使用或体验有着更深度的诉求,因此应用中的网络体验已经显得由此重要。

Android性能优化(一)启动优化

以前做手机的时候,我非常重视app的性能优化。其实一直以来,在工作中我总会去强调性能优化的重要性。但是,很多时候,由于一些外界因素,我们对app的一些性能指标不会那么重视。但是,性能优化依然是做好一个产品的重中之重。试想一下,如果用户费了很
2022-06-06

PHP 性能优化:图像处理性能调优

优化图像处理性能的方法:禁用可选的图像处理函数扩展(gd 库)。使用更快的第三方图像处理库(如 imagick 或 intervention image)。缓存已处理的图像以避免重复执行耗时的操作。延迟加载图像以减少页面加载时间。PHP 性
PHP 性能优化:图像处理性能调优
2024-05-10

Golang的性能优化

作为开发者,我们都努力创建高效、闪电般快速的应用程序,以提供出色的用户体验。在本文中,我们将探讨优化Golang应用程序性能的基本技巧。
Golang开发2024-11-30

性能优化指南:性能优化的一般性原则与方法

【本文转自博客园 作者:xybaby 原文链接:https://www.cnblogs.com/xybaby/p/9055734.html】作为一个程序员,性能优化是常有的事情,不管是桌面应用还是web应用,不管是前端还是后端,不管是单点应
2023-06-05

性能优化之window.onload

最近在做一些性能优化相关的工作,相信大家在工作过程中也会遇到一些性能优化相关的场景,这对于前端开发者来讲是一项加分技能。为了我们的用户在使用我们的产品时能够有一个非常好的体验,我们需要对页面进行诊断优化。在行业中,我们的页面P90在两秒内算

MySQL优化INSERT性能

要优化MySQL的INSERT性能,可以采取以下策略:批量插入:将多条记录合并到一个INSERT语句中,减少网络开销和数据库I/O操作。例如:INSERT INTO table_name (column1, column2, column3
MySQL优化INSERT性能
2024-10-20

MySQL性能优化,MySQL索引优化,order by优化,explain优化

今天我们来讲讲如何优化MySQL的性能,主要从索引方面优化。

MySQL tinyint性能能优化吗

是的,可以通过以下方法来优化MySQL中的tinyint字段性能:避免使用tinyint字段存储大量数据:由于tinyint字段只能存储范围有限的整数值(-128到127),因此应避免将大量数据存储在tinyint字段中,可以考虑使用int
MySQL tinyint性能能优化吗
2024-07-31

Android性能优化系列篇UI优化

这篇文章主要为大家介绍了Android性能优化系列篇UI优化示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录