亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Flex > 正文

flex 優化技巧 收集[提升性能]

2024-09-12 17:51:10
字體:
來源:轉載
供稿:網友
1、當創建一個數組的時候避免用new操作符,用 var a:Array = [];而不用var a:Array = new Array();
2、快速的復制一個數組:
var copy : Array = sourceArray.concat ();
3、設置一個數組的值是非常忙的:
employees.push ( employee ); employees[2] = employee;
4、從一個數組中取得值的速度是設置一個數組值的兩倍快:
var employee : Employee = employees[2];
5、當不需要一個類的實例的時候盡量用靜態的屬性或方法:
StringUtils.trim( "text with space at end " );
Class definition: package {
public final class StringUtils {
public static function trim( s : String ) : String {
var trimmed : String ; // implementation...
return trimmed;
}
}
}
6、在整個程序的生命周期中都不會改變的變量用const定義常量:
public const APPLICATION_PUBLISHER : String = "Company, Inc. ";
7、當一個類不需要有子類的時候應該將該類聲明為final類型的:
public final class StringUtils
8、變量和方法的長度在As3中并不影響什么性能,但在別的語言中可能就有影響: someCrazyLongMethodNameDoesntReallyImpactPerformanceTooMuch();
9、將語句寫在一行上面并不會影響AS3程序的性能,但在別的語言中卻有影響:
var i=0; j=10; k=200;
10、在內存占用上面if語句和switch語句并沒有什么區別:
語句:
if ( condition ) {
// handle condition
}
和語句:
switch ( condition ) {
case "A ": // logic to handle case A break ;
case "B ": // logic to handle case B break ;
}
占用的內存是一樣的.
11、當你的程序處理分支較多的時候,你應該適當的排列他們出現的順序,可以參照以下的方式進行:
if ( conditionThatHappensAlot ) {
//處理經常發生的業務邏輯
} else if ( conditionThatHappensSomtimes ) {
// 處理偶爾會發生的業務邏輯
} else {
// 處理幾乎不會發生的情況
}
12、Actionscript虛擬機(Flash Player)推薦在循環內部用int而不是number,但是flash Player10在flash Player9的基礎上做了很多的改進,int,uint和number之間的轉換不在像以前那么慢了。
13、每個變量都應該聲明一個確定的類型,解決那些沒有指定類型的警告信息活錯誤信息。
14、盡量少用unint,它可能會非常慢,但是Flashplayer10做了改進,速度不像以前那么慢了:
var footerHex : uint = 0x00ccff;
15、循環遍歷的時候用int類型:
for (var i: int = 0; i < n; i++)
而不用:
for (var i: Number = 0; i < n; i++)
16、在用decimal的時候用number而不用int:
var decimal : Number = 14.654;
而不用:
var decimal : int = 14.654;
17、用乘法代替除法:
用100*0.01代替100/100
18、在for和while循環中用到的計算應事先聲明好,而不是在循環中重復聲明.
for (..){ a * 180 / Math .PI ; } 應該在循環的外部申明: toRadians = a*180/Math .PI ;
19、避免在循環中調用方法或計算:
var len : int = myArray.lengh; for (var i=0;i<len;i++){}
而不要用:
for (var i=0;i< myArray.lengh;i++){ }
20、用正則表達式進行字符串的校驗,用String的方法進行字符串的查找:
// postal code validation example using regular expressions
private var regEx:RegExp = /^[A-Z][0-9][A-Z] [0-9][A-Z][0-9]$/i;
private function validatePostal( event : Event ) : void {
if ( regEx.test( zipTextInput.text ) ) {
// handle invalid input case
}
}
// search a string using String methods
var string : String = "Search me ";
var searchIndex : int = string.indexOf ( "me " );
var search : String = string.substring ( searchIndex, searchIndex + 2 );
21、重復使用諸如DisplayObjects和URLLoaderReuse之類的物體,以保持"內存平穩".
22、使用組件或創建自定義組件時應遵循Flex的組件模型,如下面的方法為組件創建時應先后調用的方法.
createChildren(); commitProperties(); updateDisplayList();
23、盡量少用dataGrid這樣的重量級的組件,除非你用一個常規的list無法實現你要的功能。
24、避免用Repeater 控件創建scrollable數據.
25、盡量避免使用setStyle()方法,這個方法在Flex框架里面是眾多代價敖貴的方法之一。
26、當你用過多的容器嵌套的時候會較低應用程序的性能:
<mx:Panel>
<mx:VBox>
<mx:HBox>
<mx:Label text ="Label 1 " />
<mx:VBox> <mx:Label text ="Label 2 " />
</mx:VBox>
<mx:HBox>
<mx:Label text ="Label 3 " />
<mx:VBox>
<mx:Label text ="Label 4 " />
</mx:VBox>
</mx:HBox>
</mx:HBox>
</mx:VBox>
</mx:Panel>
27、沒有必要每次都用容器組件作為你自定義組件的父控件:
<mx:Image xmlns:mx="http://www.adobe.com/2006/mxml " source="avatar.jpg " width ="200 " height ="200 " />
28、減少不必要的容器嵌套
29、不要在Panel中vBox和HBox,用Panel的Layout屬性就可以了
30、不要在application標簽下用HBox,和Vbox,道理和29一樣
31、設置recycleChildren為true來提高Repeater的性能 (重用已經創建過的children而不是重新創建一個新)
<mx:Script>
<![CDATA[
[Bindable]
public var repeaterData : Array = ["data 1 ", "data 2 "];
]]>
</mx:Script>
<mx:Repeater id="repeater " dataProvider="{repeaterData} ">
<mx:Label text ="data item: {repeater.currentItem} "/>
</mx:Repeater>
32、將應用程序的幀率設置為60fps或者更低:
<?xml version ="1.0 " encoding="utf-8 "?>
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml frameRate="45 ">
</mx:Application >
33、避免每一幀進行過多的顯示操作.
34、能用ENTER_FRAME事件就不用Timer事件.
public function onEnterFrame ( event : Event ) : void { }
private function init () : void {
addEventListener( Event.ENTER_FRAME, onEnterFrame );
}
而不用:
public function onTimerTick( event : Event ) : void { }
private function init () : void {
var timer : Timer = new Timer();
timer.start ();
timer.addEventListener( TimerEvent.TIMER, onTimerTick );
}
35、在多幀上面通過以下方式延遲物體的創建.
<mx:Container creationPolicy="queued "/>
36、Alpha = 0并不是visible = false (設置為invisible的物體會被忽略,不作任何處理)
loginButton.visible = false ;
而不用:
loginButton.alpha = 0;
37、性能優化:
內存釋放優化原則
1. 被刪除對象在外部的所有引用一定要被刪除干凈才能被系統當成垃圾回收處理掉;
2. 父對象內部的子對象被外部其他對象引用了,會導致此子對象不會被刪除,子對象不會被刪除又會導致了父對象不會被刪除;
3. 如果一個對象中引用了外部對象,當自己被刪除或者不需要使用此引用對象時,一定要記得把此對象的引用設置為 null;
4. 本對象刪除不了的原因不一定是自己被引用了,也有可能是自己的孩子被外部引用了,孩子刪不掉導致父親也刪不掉;
5. 除了引用需要刪除外,系統組件或者全局工具、管理類如果提供了卸載方法的就一定要調用刪除內部對象,否則有可能會造成內存泄露和性能損失;
6. 父對象立刻被刪除了不代表子對象就會被刪除或立刻被刪除,可能會在后期被系統自動刪除或第二次移除操作時被刪除;
7. 如果父對象 remove 了子對象后沒有清除對子對象的引用,子對象一樣是不能被刪除的,父對象也不能被刪除;
8. 注冊的事件 如果沒有被移除不影響自定義的強行回收機制,但有可能會影響正常的回收機制,所以最好是做到注冊的事件監聽器都要記得移除干凈。
9. 父對象被刪除了不代表其余子對象都刪除了,找到一種狀態的泄露代碼不等于其他狀態就沒有泄露了,要各模塊各狀態逐個進行測試分析,直到測試任何狀態下都能刪除整個對象為止。
內存泄露舉例 :
1. 引用泄露:對子對象的引用,外部對本對象或子對象的引用都需要置 null ;
2. 系統類泄露:使用了系統類而忘記做刪除操作了,如 BindingUtils.bindSetter() , ChangeWatcher.watch() 函數 時候完畢后需要調用 ChangeWatcher.unwatch() 函數來清除引用 ,否則使用此函數的對象將不會被刪除;
類似的還有 MUSIC , VIDEO , IMAGE , TIMER , EVENT , BINDING 等。
3. 效果 泄露:當對組件應用效果 Effect 的時候,當本對象本刪除時需要把本對象和子對象上的 Effect 動畫 停止掉,然后把 Effect 的 target 對象置 null; 如果不停止掉動畫直接把 Effect 置 null 將不能正常移除對象。
4. SWF 泄露:要完全刪除一個 SWF 要調用它的 unload() 方法并且把對象置 null;
5. 圖片泄露:當 Image 對象使用完畢后要把 source 置 null;( 為測試 ) ;
6. 聲音、視頻 泄露 : 當不需要一個音樂或視頻是需要停止音樂,刪除對象,引用置 null;
內存泄露解決方法:
1. 在組件的 REMOVED_FROM_STAGE 事件回掉中做垃圾處理操作(移除所有對外引用(不管是 VO 還是組件的都需要刪除),刪除監聽器,調用系統類的清除方法)
先 remove 再置 null, 確保被 remove 或者 removeAll 后的對象在外部的引用全部釋放干凈 ;
2. 利用 Flex 的性能優化工具 Profile 來對項目進程進行監控,可知道歷史創建過哪些對象,目前有哪些對象沒有被刪除,創建的數量,占用的內存比例和用量,創建過程等信息 ;
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩在线观看av| 亚洲成人久久久久| 国产日韩av在线播放| 国产成人涩涩涩视频在线观看| 欧美理论片在线观看| 亚洲国产欧美一区二区三区久久| 久久99精品国产99久久6尤物| 91超碰中文字幕久久精品| 成人综合网网址| 国产精品久久久久久久久久尿| 91精品国产91久久久久| 久久久久久有精品国产| 国产精品99导航| 一区二区三区久久精品| 4438全国亚洲精品在线观看视频| 九九热精品视频| 国产精品自拍视频| 美女少妇精品视频| 青青草成人在线| 欧美国产极速在线| 亚洲欧美在线磁力| 国产福利视频一区| 一道本无吗dⅴd在线播放一区| 欧美精品videofree1080p| 欧美一级bbbbb性bbbb喷潮片| 国模极品一区二区三区| 久久视频在线免费观看| 国产精品电影一区| 国产精品99蜜臀久久不卡二区| 亚洲成人aaa| 亚洲欧美综合区自拍另类| 欧美电影免费观看电视剧大全| 日韩免费观看在线观看| 亚洲免费电影在线观看| 久久夜精品va视频免费观看| 国产精品久久久久久亚洲调教| 亚洲精品久久久久久久久久久久久| 黑人极品videos精品欧美裸| 欧美超级免费视 在线| 日韩高清有码在线| 自拍亚洲一区欧美另类| 欧美成人亚洲成人日韩成人| 欧美不卡视频一区发布| 精品美女国产在线| 亚洲男女性事视频| 国产成人小视频在线观看| 黄色精品一区二区| 亚洲娇小xxxx欧美娇小| 国产在线精品成人一区二区三区| 国产精品露脸自拍| 国产精品亚洲美女av网站| 亚洲男人天堂九九视频| 性色av一区二区三区在线观看| 97在线看福利| 热久久免费国产视频| 91免费视频国产| 欧美电影在线播放| 久久久久中文字幕2018| 九九热这里只有精品免费看| 国产精品自产拍高潮在线观看| 欧美一区二区三区……| 欧美日韩一区二区在线| 日韩成人中文电影| 欧美激情一区二区三区高清视频| 国产一区二区三区四区福利| 伊人久久男人天堂| 日韩欧美在线免费观看| 亚洲自拍偷拍福利| 久久五月天色综合| 亚洲欧美综合精品久久成人| 国产在线一区二区三区| 国产成人av网址| 69久久夜色精品国产69| 国产乱人伦真实精品视频| 日韩综合中文字幕| 91精品国产综合久久香蕉的用户体验| 精品国产一区二区在线| 亚洲黄色在线观看| 国内精品久久久久影院优| 国产成人短视频| 欧美成人精品一区二区三区| 国产精品久久久久久久久久久久久| 国产成人精品优优av| 欧美亚洲成人免费| 亚洲欧美制服综合另类| 欧美富婆性猛交| 欧美一级电影在线| 日韩在线精品一区| 成人免费在线视频网址| 欧美成人精品一区二区| 欧美黑人一级爽快片淫片高清| 亚洲精品综合精品自拍| 欧美电影电视剧在线观看| 在线视频一区二区| 欧美激情亚洲一区| 亚洲精品永久免费精品| 成人av色在线观看| 欧美日韩爱爱视频| 午夜精品久久久久久久99热浪潮| 国产91精品视频在线观看| 啊v视频在线一区二区三区| 日本精品一区二区三区在线播放视频| 国产亚洲欧洲高清| 日韩免费电影在线观看| 国产不卡一区二区在线播放| 成人网在线免费看| 精品成人久久av| 国产精品xxx视频| 国产免费观看久久黄| 久久不射热爱视频精品| 成人网中文字幕| 日韩欧美大尺度| 国产精品久久久久久久av大片| 国产精品日韩精品| 91九色蝌蚪国产| 中文字幕欧美在线| 欧美精品久久久久| 日韩专区中文字幕| 久久久999精品| 久久九九国产精品怡红院| 亚洲一区二区久久久久久| 国产精品男女猛烈高潮激情| 欧美区在线播放| 国产有码一区二区| 日韩网站免费观看| 91精品国产91久久久久久| 午夜精品久久久久久久99热| 狠狠躁夜夜躁人人爽天天天天97| 乱亲女秽乱长久久久| 日本亚洲欧美三级| 日韩av最新在线观看| 国产综合视频在线观看| 5566成人精品视频免费| 亚洲人成在线观看| 久久国产加勒比精品无码| 精品高清美女精品国产区| 97免费中文视频在线观看| 欧美性生交大片免费| 97成人超碰免| 日韩中文字幕网| 亚洲天堂网站在线观看视频| 欧美日韩美女在线| 欧美性videos高清精品| 日韩欧美在线国产| 成人免费看吃奶视频网站| 国产免费一区二区三区在线能观看| 伊人伊成久久人综合网小说| 成人性生交大片免费看小说| 热99精品只有里视频精品| 青青久久av北条麻妃海外网| 亚洲永久免费观看| 高跟丝袜欧美一区| 国产精品第2页| 日韩美女在线观看| 色偷偷噜噜噜亚洲男人的天堂| 国产精品露脸av在线| 欧美区在线播放| 久久视频在线看| 欧美成人全部免费| 成人在线视频网| 欧美成人免费一级人片100| 亚洲a成v人在线观看| 日韩成人在线视频| 中文字幕视频在线免费欧美日韩综合在线看|