CPU kullanımını en aza indirme

En iyileştirme için başka önemli bir odak alanı CPU kullanımıdır. İşlemci işlemesinin en iyileştirilmesi, performansı ve bunun bir sonucu olarak da mobil aygıtların pil ömrünü arttırır.

CPU kullanımı için Flash Player 10.1 geliştirmeleri

Flash Player 10.1 CPU işlemeden tasarruf etmeyi sağlayan iki yeni özellik sunar. Özellikler arasında, ekran dışına gittiğinde SWF içeriğinin duraklatılması ve devam ettirilmesi ve bir sayfadaki Flash Player örnekleri sayısının sınırlandırılması yer alır.

Duraklatma, hızını azaltma ve devam etme

Not: Duraklatma, hızını azaltma ve devam etme özellikleri Adobe® AIR® uygulamaları için geçerli değildir.

CPU ve pil kullanımını en iyileştirmek için, Flash Player 10.1 etkin olmayan örneklerle ilişkili yeni bir özellik sunar. Bu özellik ekrandaki içerik açılıp kapatıldığında SWF dosyasını duraklatıp devam ettirerek işlemci kullanımını kısıtlamanıza izin verir. Bu özellikle, Flash Player içeriğin oynatılması devam ettirildiğinde yeniden oluşturulabilecek herhangi bir nesneyi kaldırarak mümkün olduğu kadar belleği serbest bırakır. İçeriğin tümü ekran dışı olduğunda içerik ekran dışı sayılır.

İki senaryo SWF içeriğinin ekran dışı olmasına sebep olur.

  • Kullanıcı sayfayı kaydırır ve SWF içeriğinin ekran dışına taşınmasına sebep olur.

    Bu durumda, herhangi bir ses veya video yürütülüyorsa, içerik yürütülmeye devam eder ancak görüntü oluşturma durur. Herhangi bir ses veya video yürütülmüyorsa, oynatmanın veya ActionScript yürütülmesinin duraklatılmadığından emin olmak için hasPriority HTML parametresini true olarak ayarlayın. Ancak, içerik ekranın dışındayken veya gizliyken hasPriority HTML parametresinin değerine bakılmaksızın SWF içeriği oluşturma işleminin duraklatıldığını unutmayın.

  • Tarayıcıda bir sekme açılır, bu da SWF içeriğinin arka plana taşınmasına sebep olur.

    Bu durumda hasPriority HTML etiketinin değerine bakılmaksızın, SWF içeriği 2 ila 8 kare/sn olacak şekilde yavaşlatılır veya hızı azaltılır . Ses ve video yürütülmesi durdurulur ve SWF içeriği görünür hale gelmedikçe içerik oluşturma işlemine devam edilmez.

Windows ve Mac masaüstü tarayıcılarında çalışan Flash Player 11.2 veya daha üstü için uygulamanızda ThrottleEvent öğesini kullanabilirsiniz. Flash Player, Flash Player durakladığında, hızı azaldığında veya yürütmeye devam ettiğinde bir ThrottleEvent öğesi gönderir.

ThrottleEvent bir broadcast olayıdır; diğer bir deyişle, bu olay kendisi için kaydedilmiş bir dinleyiciye sahip tüm EventDispatcher nesneleri tarafından gönderilir. Broadcast olaylarıyla ilgili daha fazla bilgi için bkz. DisplayObject sınıfı.

Örnek yönetimi

Not: Örnek yönetimi özelliği, Adobe® AIR® uygulamaları için geçerli değildir.
Ekranın dışındaki SWF dosyalarının yüklenmesini ertelemek için hasPriority HTML parametresini kullanın.

Flash Player 10.1 hasPriority adlı yeni bir HTML parametresi sunar:

<param name="hasPriority" value="true" />

Bu özellik bir sayfada başlatılmış olan Flash Player örneklerinin sayısını kısıtlar. Örneklerin sayısını kısıtlamak işlemci ve pil kaynaklarını korumaya yardım eder. Amaç bir sayfadaki diğer içeriğe içerik önceliği vererek SWF içeriğine belirli bir öncelik atamaktır. Basit bir örnek düşünün: kullanıcı bir web sitesini taramaktadır ve dizin sayfası üç farklı SWF dosyası barındırır. Bunlardan biri görünürdür, başka biri ekran üzerinde kısmen görünürdür ve sonuncusu ekran dışıdır ve kaydırmayı gerektirir. İlk iki animasyon normal şekilde başlatılır ancak sonuncusu görünür olana kadar ertelenir. hasPriority parametresi mevcut olmadığında veya false değerine ayarlandığında bu senaryo varsayılan davranıştır. Bir SWF dosyasının ekran dışı olsa da başlatılmasını sağlamak için, hasPriority parametresini true değerine ayarlayın. Ancak, hasPriority parametresinin değerinden bağımsız olarak, kullanıcıya görünmeyen bir SWF dosyasının oluşturulması her zaman duraklatılır.

Not: Kullanılabilir işlemci kaynakları azalırsa, Flash Player örnekleri hasPriority parametresi true değerine ayarlı olsa da artık otomatik başlatılmaz. Sayfa yüklendikten sonra JavaScript üzerinden yeni örnekler oluşturulursa, o örnekler hasPriority bayrağını yoksayar. Webmaster, hasPriority bayrağını dahil etmeyi başaramazsa, herhangi bir 1x1 piksel veya 0x0 piksel içerik SWF dosyalarının ertelenmesini önleyerek başlatılır. Ancak SWF dosyaları halen tıklatıldığında başlatılabilir. Bu davranışa “oynatmak için tıklat” adı verilir.

Aşağıdaki şema hasPriority parametresini değişik değerlere ayarlamanın etkilerini gösterir:

hasPriority parametresi için farklı değerlerin etkileri

hasPriority parametresi için farklı değerlerin etkileri

Uyku modu

Flash Player 10.1 ve AIR 2.5, mobil aygıtlarda CPU işleme ve bunun sonucu olarak da pil ömrü tasarrufuna yardımcı olan yeni bir özellik sunar. Bu özellik bir çok mobil aygıtta bulunan arka ışık özelliğini kapsar. Örneğin, mobil uygulama kullanan bir kullanıcı rahatsız edilirse ve aygıtı kullanmayı bırakırsa, çalışma zamanı arka ışığın ne zaman uyku moduna girdiğini algılar. Daha sonra kare hızını saniyede 4 kareye (fps) düşürür ve oluşturmayı duraklatır. AIR uygulamaları için ayrıca uygulama arka plana geçtiğinde uyku modu başlar.

ActionScript kodu Stage.frameRate özelliğini 4 fps'ye ayarlamaya benzer olarak uyku modunda çalışmaya devam eder. Ancak oluşturma adımı atlanır, böylece kullanıcı oynatıcının 4 fps'de çalıştığını göremez. Sıfır yerine 4 fps'lik bir kare hızı seçildi, çünkü bu tüm bağlantıların açık kalmasına olanak verir (NetStream, Socket ve NetConnection). Sıfıra geçmek tüm açık bağlantıları keser. Çoğu aygıt üreticisi yenileme hızı olarak 250 ms'lik (4 fps) kare hızını kullandığından bu yenileme hızı seçildi. Bu değerin kullanılması, çalışma zamanının kare hızını aygıtın kendisiyle aynı hızda tutar.

Not: Çalışma zamanı uyku modundayken Stage.frameRate özelliği 4 kare/saniye yerine orijinal SWF dosyasının kare hızını döndürür.

Arka aşık açık moda geri girdiğinde, oluşturmaya devam edilir. Kare hızı orijinal değerine döner. Bir kullanıcının müzik oynattığı bir medya oynatıcı uygulaması düşünün. Ekran uyku moduna girerse, çalışma zamanı oynatılmakta olan içerik türünü temel alarak yanıt verir. Karşılık gelen çalışma zamanı davranışına sahip durumların listesi:

  • Arka ışık uyku moduna girer ve A/V olmayan içerik oynatılır: Oluşturma duraklatılır ve kare hızı 4 fps'ye ayarlanır.

  • Arka ışık uyku moduna girer ve A/V içeriği oynatılır: çalışma zamanı kullanıcı deneyimini sürdürerek arka ışığı her zaman açık olmaya zorlar.

  • Arka ışık uyku modundan açık moda geçer: çalışma zamanı kare hızını orijinal SWF dosyası kare hızı ayarına getirir ve oluşturmayı devam ettirir.

  • A/V içeriği oynatılırken Flash Player duraklatılır: Flash Player A/V artık oynatılmadığından arka ışık durumunu varsayılan sistem davranışına sıfırlar.

  • A/V içeriği oynatılırken mobil aygıt bir telefon çağrısı alır: Oluşturma duraklatılır ve kare hızı 4 fps'ye ayarlanır.

  • Mobil bir aygıtta arka ışık uyku modu devre dışı bırakılır: çalışma zamanı normal davranır.

Arka ışık uyku moduna girdiğinde, oluşturma duraklar ve kare hızı yavaşlar. Bu özellik CPU işlemeden tasarruf eder ancak bir oyun uygulamasındaki gibi gerçek bir duraklatma oluşturması beklenemez.

Not: Çalışma zamanı uyku moduna girip çıkarken hiçbir ActionScript olayı gönderilmez.

Nesneleri dondurma ve çözme

REMOVED_FROM_STAGE ve ADDED_TO_STAGE olaylarını kullanarak nesneleri uygun biçimde dondurun ve çözün.

Kodunuzu en iyileştirmek için, nesnelerinizi her zaman dondurun ve çözün. Dondurma ve çözme bütün nesneler için önemli olsa da, özellikle görüntüleme nesneleri için önemlidir. Görüntüleme nesneleri artık görüntüleme listesinde olmasa da ve çöp toplamayı bekliyor olsa da, yoğun CPU kullanımı gerektirecek kod kullanıyor olabilirler. Örneğin, hala Event.ENTER_FRAME öğesini kullanıyor olabilirler. Sonuç olarak nesneleri Event.REMOVED_FROM_STAGE ve Event.ADDED_TO_STAGE olaylarıyla doğru uygun biçimde dondurmak ve çözmek çok önemlidir. Aşağıdaki örnekte klavye ile etkileşen sahne alanında oynatılan bir film klibi gösterilmektedir:

// Listen to keyboard events 
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyIsDown); 
stage.addEventListener(KeyboardEvent.KEY_UP, keyIsUp); 
  
// Create object to store key states 
var keys:Dictionary = new Dictionary(true); 
  
function keyIsDown(e:KeyboardEvent):void 
{ 
    // Remember that the key was pressed 
    keys[e.keyCode] = true;     
  
    if (e.keyCode==Keyboard.LEFT || e.keyCode==Keyboard.RIGHT) 
    { 
        runningBoy.play(); 
    } 
} 
  
function keyIsUp(e:KeyboardEvent):void 
{ 
    // Remember that the key was released 
    keys[e.keyCode] = false; 
  
    for each (var value:Boolean in keys) 
          if ( value ) return; 
    runningBoy.stop(); 
} 
  
runningBoy.addEventListener(Event.ENTER_FRAME, handleMovement); 
runningBoy.stop(); 
  
var currentState:Number = runningBoy.scaleX; 
var speed:Number = 15; 
  
function handleMovement(e:Event):void 
{ 
    if (keys[Keyboard.RIGHT]) 
    { 
        e.currentTarget.x += speed; 
        e.currentTarget.scaleX = currentState;     
    } else if (keys[Keyboard.LEFT]) 
    { 
        e.currentTarget.x -= speed; 
        e.currentTarget.scaleX = -currentState; 
    } 
}

Grafiği tam boyut görüntüle
Klavye ile etkileşen film klibi

Kaldır düğmesi tıklatıldığında, film klibi görüntüleme listesinden kaldırılır:

// Show or remove running boy 
showBtn.addEventListener (MouseEvent.CLICK,showIt); 
removeBtn.addEventListener (MouseEvent.CLICK,removeIt); 
 
function showIt (e:MouseEvent):void 
{ 
    addChild (runningBoy); 
} 
 
function removeIt(e:MouseEvent):void 
{ 
    if (contains(runningBoy)) removeChild(runningBoy); 
}

Görüntüleme listesinden kaldırıldığında bile, film klibi Event.ENTER_FRAME olayını göndermeye devam eder. Film klibi çalışmaya devam eder ancak oluşturulmaz. Bu durumu doğru şekilde ele almak için yoğun CPU kodunun çalıştırılmasını önlemek için doğru olayları ve olay kaldırma dinleyicilerini dinleyin:

// Listen to Event.ADDED_TO_STAGE and Event.REMOVED_FROM_STAGE 
runningBoy.addEventListener(Event.ADDED_TO_STAGE,activate); 
runningBoy.addEventListener(Event.REMOVED_FROM_STAGE,deactivate); 
 
function activate(e:Event):void 
{ 
    // Restart everything 
    e.currentTarget.addEventListener(Event.ENTER_FRAME,handleMovement); 
} 
 
function deactivate(e:Event):void 
{ 
    // Freeze the running boy - consumes fewer CPU resources when not shown 
    e.currentTarget.removeEventListener(Event.ENTER_FRAME,handleMovement); 
    e.currentTarget.stop(); 
}

Göster düğmesine basıldığında film klibi tekrar başlatılır, Event.ENTER_FRAME olaylarını yeniden diner ve klavye doğru biçimde film klibini kontrol eder.

Not: Bir görüntüleme nesnesi görüntüleme listesinden kaldırılırsa, başvurusunun null değerine ayarlanması nesnenin dondurulmasını sağlamaz. Çöp toplayıcı çalışmıyorsa, nesne artık görüntülenmese de bellek ve işlemci işlemesini kullanmaya devam eder. Nesnenin mümkün olduğunca az işlemci işlemesini kullanmasını sağlamak için, onu görüntüleme listesinden kaldırırken tamamen dondurduğunuzdan emin olun.

Flash Player 10 ve AIR 1.5'ten başlayarak aşağıdaki davranış da gerçekleşir. Oynatma kafası boş bir kareyle karşılaşırsa, herhangi bir dondurma davranışı uygulamamış olsanız da görüntüleme nesnesi otomatik olarak dondurulur.

Dondurma kavramı ayrıca Loader sınıfıyla uzaktan içerik yüklenirken de önemlidir. Loader sınıfı Flash Player 9 ve AIR 1.0 ile kullanılırken, içeriğin LoaderInfo nesnesi tarafından gönderilen Event.UNLOAD olayının dinlenmesi yoluyla el ile dondurulması gerekliydi. Her nesnenin el ile dondurulması gerekiyordu, bu da önem taşıyan bir görevdi. Flash Player 10 ve AIR 1.5, Loader sınıfında unloadAndStop() adlı önemli ve yeni bir yöntem sundu. Bu yöntem bir SWF dosyasını kaldırmanıza, yüklü olan SWF dosyasındaki her nesneyi otomatik olarak dondurmanıza ve çöp toplayıcıyı çalışmaya zorlamanıza olanak tanır.

Aşağıdaki kodda, daha fazla işleme ve el ile dondurma gerektiren unload() yöntemi kullanılarak SWF dosyası yüklenmekte ve sonra boşaltılmaktadır.

var loader:Loader = new Loader(); 
 
loader.load ( new URLRequest ( "content.swf" ) ); 
 
addChild ( loader ); 
 
stage.addEventListener ( MouseEvent.CLICK, unloadSWF ); 
 
function unloadSWF ( e:MouseEvent ):void 
{ 
    // Unload the SWF file with no automatic object deactivation 
    // All deactivation must be processed manually 
    loader.unload(); 
}

Dondurmayı yerel olarak işleyip çöp toplama işlemini çalışmaya zorlayan unloadAndStop() yöntemini kullanmak iyi bir uygulamadır.

var loader:Loader = new Loader(); 
 
loader.load ( new URLRequest ( "content.swf" ) ); 
 
addChild ( loader ); 
 
stage.addEventListener ( MouseEvent.CLICK, unloadSWF ); 
 
function unloadSWF ( e:MouseEvent ):void 
{ 
    // Unload the SWF file with automatic object deactivation 
    // All deactivation is handled automatically 
    loader.unloadAndStop(); 
}

unloadAndStop() yöntemi çağrıldığında aşağıdaki eylemler gerçekleşir:

  • Sesler durdurulur.

  • SWF dosyasının ana zaman çizelgesine kayıtlı olan dinleyiciler kaldırılır.

  • Zamanlayıcı nesneler durdurulur.

  • Donanım peripheral cihazlar (örneğin kamera ve mikrofon) bırakılır.

  • Film kliplerinin her biri durdurulur.

  • Event.ENTER_FRAME , Event.FRAME_CONSTRUCTED , Event.EXIT_FRAME , Event.ACTIVATE ve Event.DEACTIVATE öğelerinin gönderilmesi durdurulur.

Olayları etkinleştirme ve devre dışı bırakma

Arka plan etkinsizliğini algılamak ve uygulamanızı uygun şekilde en iyileştirmek için Event.ACTIVATE ve Event.DEACTIVATE olaylarını kullanın.

İki olay ( Event.ACTIVATE ve Event.DEACTIVATE ), mümkün olan en az işlemci döngüsünü kullanması için uygulamanıza hassas ayar yapmanıza yardımcı olabilir. Bu olaylar, çalışma zamanının ne zaman odak kazandığını veya kaybettiğini algılamanıza olanak sağlar. Sonuç olarak, bağlam değişikliklerine yanıt vermek için kod en iyileştirilebilir. Aşağıdaki kod her iki olayı dinler ve uygulama odağını kaybettiğinde kare hızını dinamik olarak sıfıra değiştirir. Örneğin, kullanıcı başka bir sekmeye geçtiğinde veya uygulamayı arka plana koyduğunda odak kaybedebilir:

var originalFrameRate:uint = stage.frameRate; 
var standbyFrameRate:uint = 0; 
  
stage.addEventListener ( Event.ACTIVATE, onActivate ); 
stage.addEventListener ( Event.DEACTIVATE, onDeactivate ); 
  
function onActivate ( e:Event ):void 
{ 
    // restore original frame rate 
    stage.frameRate = originalFrameRate; 
} 
  
function onDeactivate ( e:Event ):void 
{ 
    // set frame rate to 0 
    stage.frameRate = standbyFrameRate; 
}

Uygulama yeniden odak kazandığında, kare hızı orijinal değerine sıfırlanır. Kare hızını dinamik olarak değiştirmek yerine, nesneleri dondurma ve çözme gibi diğer en iyileştirmeleri yapmayı da düşünebilirsiniz.

Etkinleştirme ve devre dışı bırakma olayları, bazen mobil aygıtlarda ve Netbook'larda bulunan "Duraklat ve Devam Ettir" özelliğine benzer bir mekanizma uygulamanıza olanak sağlar.

Fare etkileşimleri

Fare etkileşimlerini mümkün olduğunca devre dışı bırakmayı göz önünde bulundurun.

MovieClip veya Sprite nesnesi gibi etkileşimli bir nesne kullanırken, fare etkileşimlerini algılamak ve işlemek için çalışma zamanı, yerel kod çalıştırır. Fare etkileşiminin algılanması, özellikle çok sayıda üst üste gelen etkileşimli nesne ekranda gösterildiğinde yoğun işlemci kullanımı gerektirebilir. Bu işlemeden kaçınmak için kolay bir yöntem de, fare etkileşimi gerektirmeyen nesnelerdeki fare etkileşimlerini devre dışı bırakmaktır. Aşağıdaki kod mouseEnabled ve mouseChildren özelliklerinin kullanımını gösterir:

// Disable any mouse interaction with this InteractiveObject 
myInteractiveObject.mouseEnabled = false; 
const MAX_NUM:int = 10; 
  
// Create a container for the InteractiveObjects 
var container:Sprite = new Sprite(); 
  
for ( var i:int = 0; i< MAX_NUM; i++ ) 
{ 
    // Add InteractiveObject to the container 
    container.addChild( new Sprite() ); 
} 
  
// Disable any mouse interaction on all the children 
container.mouseChildren = false;

Mümkün olduğunca fare etkileşimini devre dışı bırakmayı göz önünde bulundurun. Bu, uygulamanızın daha az işlemci işlemesi kullanmasını sağlar ve bunun bir sonucu olarak da mobil aygıtlarda pil kullanımının azaltılmasına yardımcı olur.

Zamanlayıcılarla ENTER_FRAME olaylarının karşılaştırılması

İçeriğin hareketli olup olmamasına bağlı olarak zamanlayıcıları veya ENTER_FRAME olaylarını seçin.

Hareketli olmayan ve uzun süre boyunca çalıştırılan içerik için Event.ENTER_FRAME olayları yerine zamanlayıcılar tercih edilir.

ActionScript 3.0’da belirli aralıklarla işlev çağırmanın iki yolu bulunur. İlk yaklaşım, görüntüleme nesneleri (DisplayObject) tarafından gönderilen Event.ENTER_FRAME olayını kullanma doğrultusundadır. İkinci yaklaşım ise bir zamanlayıcı kullanmaktır. ActionScript geliştiricileri sık sık ENTER_FRAME olayı yaklaşımını kullanır. ENTER_FRAME olayı her karede gönderilir. Bunun bir sonucu olarak işlevin çağrıldığı aralık geçerli kare hızı ile ilgilidir. Kare hızına Stage.frameRate özelliği üzerinden erişilebilir. Ancak bazı durumlarda zamanlayıcının kullanılması ENTER_FRAME olayın kullanılmasından daha iyi olabilir. Örneğin, animasyon kullanmıyorsanız ancak belirli aralıklarla kodunuzun çağrılmasını istiyorsanız zamanlayıcı kullanmak daha iyi bir seçenektir.

Bir zamanlayıcı ENTER_FRAME olayıyla aynı davranışı gösterir, ancak bir olay kare hızından bağımsız olarak gönderilebilir. Bu davranış etkili bir en iyileştirme sunabilir. Örnek olarak bir video oynatıcısı uygulamasını düşünün. Bu durumda, yalnızca uygulama kontrolleri hareket ettiğinden yüksek kare hızına ihtiyacınız olmaz.

Not: Video zaman çizelgesine gömülü olmadığından kare hızı videoyu etkilemez. Bunun yerine video aşamalı indirme veya akış üzerinden dinamik olarak yüklenir.

Bu örnekte kare hızı 10 kare/saniyelik düşük bir değere ayarlıdır. Zamanlayıcı, kontrolleri saniyede bir güncelleme hızında günceller. Yüksek güncelleme hızı TimerEvent nesnesindeki updateAfterEvent() yöntemi ile sağlanır. Bu yöntem ekranı gerektiğinde zamanlayıcı her olay gönderdiğinde güncellenmeye zorlar. Aşağıdaki kod bu fikri göstermektedir:

// Use a low frame rate for the application 
stage.frameRate = 10; 
  
// Choose one update per second 
var updateInterval:int = 1000; 
var myTimer:Timer = new Timer(updateInterval,0); 
  
myTimer.start(); 
myTimer.addEventListener( TimerEvent.TIMER, updateControls ); 
  
function updateControls( e:TimerEvent ):void 
{ 
    // Update controls here 
    // Force the controls to be updated on screen 
    e.updateAfterEvent(); 
}

updateAfterEvent() yönteminin çağrılması kare hızını değiştirmez. Yalnızca çalışma zamanını, ekrandaki değişen içeriği güncellemeye zorlar. Zaman çizelgesi halen 10 kare/saniyede çalışmaktadır. Düşük performanslı aygıtlarda veya olay işleyici işlemlerinin ağır işleme gerektiren kodlar barındırması durumunda zamanlayıcıların ve ENTER_FRAME olaylarının tam olarak doğru olmadığını unutmayın. SWF dosyasının kare hızında olduğu gibi, zamanlayıcının güncelleme kare hızı da bazı durumlarda değişiklik gösterebilir.

Uygulamanızdaki Timer nesnelerinin ve kayıtlı enterFrame işleyicilerinin sayısını en aza indirin.

Çalışma zamanı, görüntüleme listesindeki her görüntüleme nesnesine her karede bir enterFrame olayı gönderir. Birden fazla görüntüleme nesnesi olan enterFrame olayına ilişkin dinleyicileri kaydedebilseniz de, bu işlemin gerçekleştirilmesi her kare için daha fazla kodun çalıştırması anlamına gelir. Bunun yerine, karelerin her birini çalıştırmak için kullanılan kodun tamamını çalıştıran tek bir merkezi enterFrame işleyicisi kullanmayı göz önünde bulundurun. Bu kodun merkezileştirilmesiyle, sıkça çalıştırılan kodun tamamının yönetilmesi daha kolaydır.

Buna benzer olarak, Timer nesneleri kullanmanız durumunda, birden çok Timer nesnesinden olay oluşturma ve gönderme konusunda ek bir yük ortaya çıkar. Farklı aralıklarda farklı işlemler tetiklemeniz gerekiyorsa, aşağıda önerilen alternatifleri bulabilirsiniz:

  • Ne kadar sıklıkta gerçekleştiklerine dayanarak en az sayıda Timer nesnesi ve grup işlemi kullanın..

    Örneğin, sıkça gerçekleştirilen işlemler için, 100 milisaniyede bir tetiklenecek şekilde ayarlı tek bir Timer öğesi kullanın. Daha az sıklıkta gerçekleşen veya arka plan işlemleri için her 2000 milisaniyede bir tetiklenen başka bir Timer öğesi kullanın.

  • Tek bir Timer nesnesi kullanın ve işlemlerin Timer nesnesinin birden fazla delay özelliği aralığında tetiklenmesini sağlayın.

    Örneğin, 100 milisaniyede bir gerçekleşmesi gereken işlemleriniz ve 200 milisaniyede gerçekleşmesini istediğiniz başka işlemler olduğunu varsayın. Bu durumda, 100 milisaniyelik bir delay değeri olan tek bir Timer nesnesi kullanın. timer olay işleyicisine, diğer zamanlarda yalnızca 200 milisaniyede bir meydana gelecek işlemleri çalıştıran bir koşul ifadesi ekleyin. Aşağıdaki örnek bu tekniği göstermektedir:

    var timer:Timer = new Timer(100); 
    timer.addEventListener(TimerEvent.Timer, timerHandler); 
    timer.start(); 
         
    var offCycle:Boolean = true; 
      
    function timerHandler(event:TimerEvent):void 
    { 
        // Do things that happen every 100 ms 
         
        if (!offCycle) 
        { 
            // Do things that happen every 200 ms 
        } 
         
        offCycle = !offCycle; 
    }
Timer nesnelerini kullanımda değilken durdurma.

Bir Timer nesnesinin timer olay işleyicisi işlemleri yalnızca belirli koşullarda gerçekleştiriyorsa, koşulların hiçbiri true olmadığında Timer öğesinin stop() yöntemini çağırın.

enterFrame olayında veya Timer işleyicilerinde, ekranda yeniden çizim yapılmasına neden olan görüntüleme nesnelerinin görünümünde yapılan değişiklik sayısını en aza indirin.

Oluşturma aşaması, o kare süresince değişen sahne alanı bölümünü Her karede yeniden çizer. Yeniden çizme bölgesi büyükse veya küçük olmasına rağmen yüksek miktarda veya karmaşık görüntüleme nesneleri içeriyorsa, çalışma zamanının oluşturma için daha fazla süreye ihtiyacı vardır. İstenen yeniden çizme miktarını test etmek için, Flash Player’ın hata ayıklayıcı sürümü veya AIR’deki “yeniden çizilen bölgeleri göster” özelliğini kullanın.

Tekrarlanan eylemler için performansı iyileştirme hakkında daha fazla bilgi için, aşağıdaki makaleyi inceleyin:

Hareket arası oluşturma sendromu

İşlemci gücünden tasarruf etmek için, hareket arası oluşturma işlemini kısıtlayın. Bu durum, işlemci işlemesinden, bellekten ve pil ömründen de tasarruf sağlar.

Masaüstünde Flash içeriği üreten tasarımcılar ve geliştiriciler, uygulamalarında çok sayıda hareket arası kullanma eğilimindedir. Düşük performanslı mobil aygıtlar için içerik üretirken hareket aralarının kullanımını en aza indirmeye çalışın. Bunların kullanımının kısıtlanması içeriğin düşük katlı aygıtlarda daha hızlı çalışmasına yardımcı olur.