我有一個嵌套多個層次的對象,我多次引用它。創建和設置對該對象的引用是否更快?還是它很重要?在ActionScript中設置對嵌套對象的局部變量的引用是否更快?
上下文 我聽說創建本地引用的速度更快。這是幾年前的一個Visual Basic項目。但這是Flash。輸出是一個SWF /字節碼。編譯器可以查看該引用並執行我正在做的操作,以便每次都不必查看該對象。
例如:
public function doStuff():void {
Model.instance.view1.button1 = button1;
Model.instance.view1.button2 = button2;
Model.instance.view1.button3 = button3;
Model.instance.view1.button4 = button4;
Model.instance.view1.button5 = button5;
Model.instance.view1.button6 = button6;
// more fake code referencing more something.something.something like things
for (var i:int;i<something.something.something.length;i++) {
var result:Object = Controller.staticMethod(button1);
var result2:Object = Controller.staticMethod(button1);
}
}
Vs的:
public function doStuff():void {
var view1:View = Model.instance.view1;
view1.button1 = button1;
view1.button2 = button2;
view1.button3 = button3;
view1.button4 = button4;
view1.button5 = button5;
view1.button6 = button6;
}
。
考慮Baris的建議我自己測試了一下。下面是結果(雖然我不知道如何將它們解釋爲實際差異,即'方法1比方法2快0.000001')。
結果
測試1
var instance:Model = Model.instance;
var startTime:int = getTimer();
for(var i:int = 0; i<10000000; i++){
instance.url = "";
}
trace(getTimer()-startTime); // 826, 929, 823
var startTime:int = getTimer();
for(var i:int = 0; i<10000000; i++){
Model.instance.url = "";
}
trace(getTimer()-startTime); // 3483, 3976, 3539
測試2
var instance:Model = Model.instance;
var localLogo:BitmapImage = Model.instance.logo;
var startTime:int = getTimer();
for(var i:int = 0; i<10000000; i++){
localLogo = logo;
}
trace(getTimer()-startTime); // 2070, 2083, 2110
var startTime:int = getTimer();
for(var i:int = 0; i<10000000; i++){
instance.logo = logo;
}
trace(getTimer()-startTime); // 2028, 2509, 2154
我使用Model.instance.button1 = button1 vs var localInstance.button1 = button1運行這些10,000,000次,差異爲 Model6.06.ms爲6206ms,localInstance.button1 = button1爲2947ms。問題在於區別,因爲實例是一個getter或是查找。去嘗試另一個測試... – 2012-08-09 18:00:40
你可能永遠不會做這樣的事情,所以我不會太擔心哪一個更快,只需選擇一個對你(或你的團隊)更具可讀性的堅持下去。 – 2012-08-09 18:06:03
我剛剛更新了測試結果的問題。因此,使用百萬次循環,你如何找出差異是什麼?我的意思是說,給你的結果你會說,「它快0.00001秒」? – 2012-08-09 18:22:43