Uygulama performansının nasıl iyileştirileceğini anlamanın bir püf noktası da Flash Platform çalışma zamanının kodu nasıl çalıştırdığını anlamaktır. Çalışma zamanı, karelerin her birinde gerçekleşen belirli hareketlerle döngü içinde çalışır. Bu durumda, bir kare, uygulama için belirtilen kare hızının belirlediği basit bir zaman bloğudur. Karelerin her birine paylaştırılan süre doğrudan kare hızına karşılık gelir. Örneğin, saniyede 30 karelik bir kare hızı belirlerseniz, çalışma zamanı, her karenin bir saniyenin 30’da biri kadar sürmesini sağlamaya çalışır.
Uygulamanızın ilk kare hızını geliştirme zamanında belirlersiniz. Kare hızını Adobe® Flash® Builder™ veya Flash Professional'daki ayarları kullanarak ayarlayabilirsiniz. Birinci kare hızını kodda da belirtebilirsiniz. Yalnızca ActionScript olan bir uygulamada, kare hızını kök belge sınıfınıza
[SWF(frameRate="24")]
meta veri etiketini uygulayarak ayarlayın. MXML’de, Application veya WindowedApplication etiketindeki
frameRate
niteliğini ayarlayın.
Her kare döngüsü üç bölüme ayrılmış iki aşamadan oluşur: olaylar,
enterFrame
olayı ve oluşturma.
Birinci aşama iki bölüm içerir (olaylar ve
enterFrame
olayı), ikisi de büyük olasılıkla kodunuzun çağrılmasıyla sonuçlanır. Birinci aşamanın ilk bölümünde, çalışma zamanı olayları gelir ve gönderilir. Bu olaylar, bir ağ üzerinden yapılan veri yüklemeden gelen bir yanıt gibi senkronize olmayan işlemlerin tamamlanmasını veya ilerlemesini temsil edebilir. Ayrıca, bu olaylar kullanıcı girdisinden gelen olayları da içerir. Çalışma zamanı, olaylar gönderilirken kodunuzu, kaydettirdiğiniz dinleyicilerde çalıştırır. Herhangi bir olay gerçekleşmezse, çalışma zamanı bu çalıştırma aşamasını herhangi bir işlem gerçekleştirmeden tamamlamayı bekler. Çalışma zamanı, bir etkinliğin olmamasından dolayı, kare hızını asla hızlandırmaz. Olaylar çalıştırma döngüsünün diğer bölümleri sırasında gerçekleşirse, çalışma zamanı bu olayları sıraya dizer ve bir sonraki karede gönderir.
Birinci karenin ikinci bölümü
enterFrame
olayıdır. Bu olay, her karede bir defa gönderildiği için diğerlerinden farklıdır.
Tüm olaylar gönderildiğinde, kare döngüsünün oluşturma aşaması başlar. Bu noktada, çalışma zamanı ekranda görünür olan tüm öğelerin durumunu hesaplar ve bu öğeleri ekranda çizer. Ardından bu süreç, bir parkurun etrafından koşan bir koşucu gibi kendini tekrar eder.
Not:
Bir
updateAfterEvent
özelliğini içeren olaylar için, görüntü oluşturma oluşturma aşamasının başlamasını beklemeden zorla başlatılabilir. Ancak, sıklıkla performans sorunlarına neden oluyorsa,
updateAfterEvent
öğesini kullanmaktan kaçının.
Kare döngüsündeki iki aşamanın eşit miktarda süre harcadığını düşünmek en kolay yoldur. Bu durumda, kare döngülerinin her birinin yarısı için, olay işleyicileri ve uygulama kodu çalışır ve diğer yarısı için oluşturma gerçekleşir. Ancak, gerçekte meydana gelen durum genellikle farklıdır. Bazen uygulama kodu, kendisine ayrılan süreyi uzatarak ve oluşturma için ayrılan süreyi kısaltarak karedeki kullanılabilir sürenin yarısından fazlasını alır. Özellikle de filtreler ve karıştırma modları gibi karmaşık görsel içeriğin olduğu başka durumlarda, oluşturma işlemi, kare hızının yarısından fazlasını gerektirir. Aşamaların kullandığı gerçek süre esnek olduğundan, kare döngüsü genellikle “elastik parkur” olarak bilinir.
Kare döngüsü işlemlerinin bileşimi (kod çalıştırma ve oluşturma) fazla uzun sürerse, çalışma zamanı kare hızını koruyamaz. Kare, kendisine ayrılan süreden daha fazlasını alarak genişler, böylece bir sonraki kare tetiklenmeden önce bir gecikme olur. Örneğin, bir kare döngüsü saniyenin otuzda birinden daha uzun süre alıyorsa, çalışma zamanı ekranı 30 kare/sn hızında güncelleştiremez. Kare hızı yavaşladığında, kullanıcının deneyimi kötüleşir. En iyi durumda bile animasyon kesik olur. Daha kötü durumlarda, uygulama kilitlenir ve boş pencere görüntülenir.
Flash Platform çalışma zamanı kodunu çalıştırmayla ve oluşturma modeliyle ilgili daha fazla ayrıntı için, aşağıdaki kaynakları inceleyin: