如果可能,請盡量使用 Vector 類別,而非 Array 類別。
Vector 類別比 Array 類別能更快速地讀取與寫入存取。
簡單的基準測試可顯示 Vector 類別優於 Array 類別的益處。下列程式碼顯示 Array 類別的基準測試:
var coordinates:Array = new Array();
var started:Number = getTimer();
for (var i:int = 0; i< 300000; i++)
{
coordinates[i] = Math.random()*1024;
}
trace(getTimer() - started);
// output: 107
下列程式碼顯示 Vector 類別的基準測試:
var coordinates:Vector.<Number> = new Vector.<Number>();
var started:Number = getTimer();
for (var i:int = 0; i< 300000; i++)
{
coordinates[i] = Math.random()*1024;
}
trace(getTimer() - started);
// output: 72
此範例可進一步最佳化,方法是將特定的長度指定給向量並將其長度設定為固定:
// Specify a fixed length and initialize its length
var coordinates:Vector.<Number> = new Vector.<Number>(300000, true);
var started:Number = getTimer();
for (var i:int = 0; i< 300000; i++)
{
coordinates[i] = Math.random()*1024;
}
trace(getTimer() - started);
// output: 48
如果沒有事先指定向量的大小,則會在向量用盡空間時增加向量的大小。每次增加向量的大小時,就會配置新的記憶體區塊。而向量目前的內容會複製到新的記憶體區塊中。但這些額外的配置和資料複製作業將妨礙效能。上述程式碼藉由指定向量的起始大小來最佳化效能。不過,此程式碼並無法最佳化可維護性。若同時要改進可維護性,請在常數中儲存重複使用值:
// Store the reused value to maintain code easily
const MAX_NUM:int = 300000;
var coordinates:Vector.<Number> = new Vector.<Number>(MAX_NUM, true);
var started:Number = getTimer();
for (var i:int = 0; i< MAX_NUM; i++)
{
coordinates[i] = Math.random()*1024;
}
trace(getTimer() - started);
// output: 47
請盡可能嘗試使用 Vector 物件 API,因為其執行速度較快。