ADOBE FLASH PLATFORM için Performansı En İyileştirme



Benzer belgeler
Animasyon Teknikleri, Ses ve Video İşlemleri 1 / 18

KOD PARÇACIKLARI 1 / 5

SEAT on-line HSO KULLANICI EL KİTABI SÜRÜMÜ

2. Belgeye Metin Ekleme

Açılan programın pencere görünümü aşağıdaki gibidir. 2. Araç Çubuğundan kaydet düğmesi ile

GRAFİK TASARIM. ACTION SCRIPT 3.0 Ders1 YARD. DOÇ. DR. MEHTAP YALÇINKAYA

Flash ile Etkileşimli Öğretim Materyali Hazırlama Semineri

Archive Player Divar Series. Kullanım kılavuzu

AKILLI KÜRSÜ KULLANIM KILAVUZU

Yükleme kılavuzu Fiery Extended Applications 4.2 ile Command WorkStation 5.6

Wacker Neuson Media Pool için kısa talimatlar

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

Connection Manager Kullanım Kılavuzu

Kurulum ve Başlangıç Kılavuzu. DataPage için

Android e Giriş. Öğr.Gör. Utku SOBUTAY

NOT: LÜTFEN BU BELGEYİ OKUMADAN YAZILIMI YÜKLEMEYİ DENEMEYİN.

HESAP MAKİNASI YAPIMI

Çizim Yapma. Renk. Boyama

EKİM, 2017 ABB Connect Tüm Fonksiyonlar

İçindekiler. Giriş Kanuni Uyarılar IRISCompressor Yüklemesi ve Kurulumu Sistem Gereksinimleri Kurulum Etkinleştirme...

İşletim Sistemi Nedir?

Kurulum ve Başlangıç Kılavuzu. DataPage için

BİL Bilişim Teknolojileri. PowerPoint


McAfee epolicy Orchestrator Pre-Installation Auditor 2.0.0

Bilgisayarım My Computer

Üst Düzey Programlama

Start : Bu method init methodundan hemen sonra çalışır ve applet dosyası yürütülmeye başladığında çalışmaya başlar.

MapCodeX MapLand Kullanım Kılavuzu

Burak Kıymaz JAVA FX

Ders: Görsel senaryo taslağının önemi

İşletim Sistemlerine Giriş

4 Front Page Sayfası Özellikleri

Veritabanı Tasarımı. Sütun Değerlerini Güncelleme ve Satırları Silme

Hızlı Başlangıç Kılavuzu

Photoshop ta Web Sayfaları Oluşturma

İçindekiler. Giriş Kanuni Uyarılar IRISCompressor Yüklemesi ve Kurulumu Sistem Gereksinimleri Kurulum Etkinleştirme...

Hızlı Başlangıç Kılavuzu

NESNEYE YÖNELİK PROGRAMLAMA

Seçenekler Menüsünden Genel Sekmesi

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

VERİ KAYNAKLARI. Bilgi sisteminin öğelerinden biride veri

LABORATUVAR ÇALIŞMASI #2

Bilgisayarım My Computer. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Microsoft PowerPoint

Dersin Konusu ve Amaçları: Ders P lanı: Bölüm 1: Bilgi Teknolojilerinde Temel Kavramlar

Giriş. Memeo Instant Backup Hızlı Başlangıç Kılavuzu. 1. Adım: Ücretsiz Memeo hesabınızı oluşturun. 2. Adım: Depolama aygıtınızı bilgisayarınıza takın

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

Hızlı Başlangıç Kılavuzu

ecyber Kullanıcı Kılavuzu 1 / 1 1. ecyber hakkında Sistem gereksinimleri:... 2 Donanım:... 2 Yazılım: Kullanım Rehberi...

Vodafone Akıllı Bas Konuş Servisi Masaüstü Uygulaması Kullanım Kılavuzu

Fiery Driver Configurator

Kurulum (Windows)...3

BİT in Temel Bileşenleri (Yazılım-1)

Temel Bilgi Teknlolojileri 1. Ders notları 5. Öğr.Gör. Hüseyin Bilal MACİT 2017

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015

Android Ders Notları

Copyright 2017 HP Development Company, L.P.

MOBİL UYGULAMA GELİŞTİRME

Teknik Belge WDR. WDR: Wide Dynamic Range Geniş Dinamik Aralık nedir? Niçin Önemlidir? elektronik-guvenlik.com SECURITURK

FINDIK Herkese Açık Filtre

C# nedir,.net Framework nedir?

Hızlı Başlangıç Kılavuzu

Windows 8.1 Güncelleştirmesi Adım Adım Kılavuzu

Başlarken NSZ-GS7. Ağ Ortam Oynatıcısı. Ekran görüntüleri, işlemler ve teknik özellikler önceden bildirilmeksizin değiştirilebilir.

Computer Setup Kullanıcı Kılavuzu

Web tabanlı altyapı sayesinde her cihazdan erişilebilir ve düzenlenebilir dokümanlar oluşturulup anında paylaşılabilir.

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Power BI. Neler Öğreneceksiniz?

PAPERWORK TEKNİK MİMARİ

İçindekiler. Akıllı Tahta Uygulaması (ATU) Kullanma Kılavuzu. İçindekiler. Bölüm 1: Uygulama Hakkında Genel bilgi 2

Teknik İş Raporu. HP Sure View. Tek tuşla iş cihazı ekranı gizliliği. Mayıs Teknik İş Raporu HP Sure View 01

Vodafone dan Office 365. Satış temsilcisi ismi Tarih

Veritabanı Tasarımı. Kullanıcı Erişimini Kontrol Etme

Fiery seçenekleri 1.3 yardımı (sunucu)

BİLİŞİM TEKNOLOJİLERİ VE YAZILIM DERSİ MICROSOFT POWERPOINT ve MICROSOFTPOWERPOINT ÇALIŞMA SORULARI

İşletim Sistemleri (Operating Systems)

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı Đlkbahar Dönemi 13 Nisan Ad, Soyad Öğrenci No.

HDD Password Tool. Kullanıcı Elkitabı. Türkçe

DOSYALARI DÜZENLEMEK

ECDL ImageMaker Müfredat

Akıllı Mürekkep Tasarrufları Kılavuzu

PEDVA Kullanıcı Kılavuzu

DJCONTROL COMPACT VE DJUCED 18 İLE BAŞLAMA

Sony FY14 BRAVIA B2B. Yeni FY14 Bravia B2B serisi tanıtımı

HIZLI BAşVURU KILAVUZU

VET ON KULLANIM KLAVUZU

IPACK LADDER. Arayüz Dökümantasyonu

Seçenekler Menüsünde Yazdır, Kaydet, Kullanıcı Bilgisi Ve Uyumluluk Sekmelerinin Anlatımı

VAN EDREMİT İLÇE MİLLİ EĞİTİM MÜDÜRLÜĞÜ

Microsoft SQL Server Sorgulama

Dijibil Kullanım Klavuzu

VHOPE ve VHOPE kitaplık dosyalarını kurma

İÇİNDEKİLER BÖLÜM-1. BİLGİSAYARIN TANIMI VE ÇALIŞMA PRENSİBİ...1 BÖLÜM-2. WİNDOWS XP İŞLETİM SİSTEMİ...27

Programlama Dilleri 1. Ders 12: Belirleyiciler ve Niteleyiciler

Şimdi Pro Zamanı: MapInfo Pro 64 bit versiyonu tanıtımı!

BİLGİSAYAR PROGRAMLARININ TASARIMLARINDAKİ VE KODLARINDAKİ SORUNLARIN BELİRLENMESİ ALPER FİLİZ MEHMET ALİ SERT

Bilgisayarların Gelişimi

Windows İşletim Sistemi

Transkript:

ADOBE FLASH PLATFORM için Performansı En İyileştirme

Yasal bildirimler Yasal bildirimler Yasal bildirimler için bkz. http://help.adobe.com/tr_tr/legalnotices/index.html.

iii İçindekiler Bölüm 1: Giriş Çalışma zamanı kodunu çalıştırmanın temelleri......................................................................... 1 Algılanan performans ile gerçek performansın karşılaştırılması.......................................................... 2 En iyileştirmelerinizin hedefini belirleme............................................................................... 3 Bölüm 2: Belleği saklama Görüntüleme nesneleri................................................................................................ 4 İlkel türler............................................................................................................. 4 Nesneleri yeniden kullanma........................................................................................... 6 Belleği boşaltmak.................................................................................................... 11 Bitmap'leri kullanma.................................................................................................. 12 Filtreleri ve dinamik bitmap'i kaldırma................................................................................ 18 Doğrudan mipmap oluşturma........................................................................................ 19 3B efektlerini kullanma............................................................................................... 20 Metin nesneleri ve bellek............................................................................................. 21 Olay modeli ile geri aramaların karşılaştırması......................................................................... 22 Bölüm 3: CPU kullanımını en aza indirme CPU kullanımı için Flash Player 10.1 geliştirmeleri...................................................................... 23 Uyku modu.......................................................................................................... 25 Nesneleri dondurma ve çözme........................................................................................ 26 Olayları etkinleştirme ve devre dışı bırakma........................................................................... 29 Fare etkileşimleri..................................................................................................... 30 Zamanlayıcılarla ENTER_FRAME olaylarının karşılaştırılması............................................................ 31 Hareket arası oluşturma sendromu.................................................................................... 33 Bölüm 4: ActionScript 3.0 performansı Vector sınıfının Array sınıfıyla karşılaştırılması.......................................................................... 34 Çizim API'si........................................................................................................... 35 Olayı dıştan içe ve içten dışa tetikleme................................................................................ 36 Piksellerle çalışma.................................................................................................... 38 Normal ifadeler....................................................................................................... 39 Çeşitli en iyileştirmeler................................................................................................ 40 Bölüm 5: Performans oluşturma Yeniden çizilen bölgeler.............................................................................................. 46 Sahne alanı dışındaki içerik........................................................................................... 47 Film kalitesi.......................................................................................................... 48 Alfa karıştırma........................................................................................................ 50 Uygulama kare hızı................................................................................................... 51 Bitmap'leri önbelleğe alma........................................................................................... 52 Bitmap'leri elle önbelleğe alma....................................................................................... 60 Metin nesneleri oluşturma............................................................................................ 66 GPU.................................................................................................................. 70

İçindekiler iv Eş zamanlı olmayan işlemler.......................................................................................... 73 Saydam pencereler................................................................................................... 74 Vektör şekli düzleştirme.............................................................................................. 75 Bölüm 6: Ağ etkileşimini en iyileştirme Ağ etkileşimi için geliştirmeler........................................................................................ 77 Harici içerik.......................................................................................................... 78 Girdi çıktı hataları..................................................................................................... 81 Flash Remoting....................................................................................................... 82 Gereksiz ağ işlemleri.................................................................................................. 84 Bölüm 7: Medya ile çalışma Video................................................................................................................ 85 StageVideo........................................................................................................... 85 Ses................................................................................................................... 85 Bölüm 8: SQL veritabanı performansı Veritabanı performansı için uygulama tasarımı........................................................................ 87 Veritabanı dosyası en iyileştirmesi..................................................................................... 90 Gereksiz veritabanı çalışma zamanı işleme............................................................................ 90 Etkili SQL sözdizimi................................................................................................... 91 SQL ifadesinin performansı........................................................................................... 92 Bölüm 9: Kıyaslama ve konuşlandırma Kıyaslama............................................................................................................ 93 Dağıtma............................................................................................................. 94

1 Bölüm 1: Giriş Adobe AIR ve Adobe Flash Player uygulamaları, masaüstleri, mobil aygıtlar, tabletler ve televizyon aygıtları gibi birçok platformda çalışır. Bu belge, bu uygulamaları dağıtan geliştiriciler için en iyi çalışma biçimlerini ana hatlarıyla kod örnekleri ve kullanım durumları üzerinden anlatır. Konular şunlardır: Belleği saklama CPU kullanımını en aza indirme ActionScript 3.0 performansını geliştirme Oluşturma hızını artırma Ağ etkileşimini en iyileştirme Ses ve videoyla çalışma SQL veritabanı performansını en iyileştirme Uygulamaları kıyaslama ve konuşlandırma Bu en iyileştirmelerin çoğu, hem AIR çalışma zamanında hem de Flash Player çalışma zamanında tüm aygıtlardaki uygulamalar için geçerlidir. Belirli aygıtlar için eklemeler ve istisnalar da ele alınmaktadır. Bu en iyileştirmelerin bazıları, Flash Player 10.1 ve AIR 2.5'te sunulan yeteneklere odaklanır. Ancak bu en iyileştirmelerin çoğu, önceki AIR ve Flash Player sürümleri için de geçerlidir. Çalışma zamanı kodunu çalıştırmanın temelleri 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.

Giriş 2 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: Flash Player Mental Model - The Elastic Racetrack (Flash Player Zihin Modeli - Elastik Parkur) (makale Ted Patrick tarafından yazılmıştır) Asynchronous ActionScript Execution (ActionScript i Senkronize Olmayan Bir Şekilde Çalıştırma) (makale Trevor McCauley tarafından yazılmıştır) Adobe AIR'yi kod yürütme, bellek ve oluşturma için en iyi hale getirme: http://www.adobe.com/go/learn_fp_air_perf_tv_tr (Sean Christmann'ın MAX konferansındaki sunumunun videosu) Algılanan performans ile gerçek performansın karşılaştırılması Uygulamanızın iyi performans gösterip göstermediği konusunda en son kararı verecek kişiler, uygulamanın kullanıcılarıdır. Geliştiriciler, uygulamanın performansını belirli işlemlerin çalışmak için ne kadar süre gerektirdiği veya nesnelerin kaç tane örneğinin oluşturulduğuna göre ölçebilir. Ancak, bu ölçümler son kullanıcılar için önemli değildir. Bazen kullanıcılar performansı değişik kriterlere göre ölçerler. Örneğin, uygulama hızlı ve sorunsuz bir şekilde çalışıp girdilere hızlı bir şekilde yanıt veriyor mu? Sistem performansı üzerinde negatif bir etkisi var mı? Algılanan performansla ilgili sınama yapmak için kendinize aşağıdaki soruları sorun: Animasyonlar düzgün mü yoksa kesik mi? Video içeriği düzgün mü yoksa kesik mi görünüyor? Ses klipleri devamlı oynatılıyor mu, yoksa duraklatılıp devam mı ediyor?

Giriş 3 Uzun işlemler sırasında pencere titriyor mu veya boş görünüyor mu? Yazmaya başladığınızda, metin girişi yazma hızıma yetişiyor mu yoksa gecikiyor mu? Bir öğeyi tıklattığınızda hemen işlem gerçekleşiyor mu, yoksa gecikme mi var? Uygulama çalışırken CPU fanı daha fazla gürültü çıkarıyor mu? Uygulama bir dizüstü bilgisayarda veya mobil aygıtta çalıştırılırken, pil gücü hızla tükeniyor mu? Uygulama çalışırken diğer uygulamalar yavaş yanıt veriyor mu? Algılanan performans ve gerçek performansın arasındaki farklar önemlidir. En iyi algılanan performansı gerçekleştirmenin yolu her zaman mutlak en hızlı performansı sağlamakla aynı yol değildir. Uygulamanızın, çalışma zamanının sık sık ekranı güncelleme ve kullanıcı girdisi alma işlemlerini gerçekleştiremeyeceği kadar kod çalıştırmadığından emin olun. Bazı durumlarda bu dengeyi sağlamak için, bir program görevi parçalara ayrılabilir, böylece çalışma zamanı, parçaların arasında ekranı günceller. (Daha özel konularda yardım almak için bkz. Performans oluşturma sayfa 46.) Burada açıklanan ipuçları ve teknikler hem asıl kod çalıştırma performansını hem de kullanıcıların performansı algılayış biçimini iyileştirmeyi hedefler. En iyileştirmelerinizin hedefini belirleme Bazı performans geliştirmeleri kullanıcılar için fark edilebilir bir geliştirme oluşturmaz. Performans en iyileştirmelerini sizin belirli uygulamanızda sorun çıkaran alanlar üzerinde yoğunlaştırmanız önemlidir. Bazı performans en iyileştirmeleri genel olarak faydalı uygulamalardır ve her zaman takip edilebilir. Diğer en iyileştirmelerin kullanışlı olup olmadığı uygulamanızın gereksinimlerine ve öngörülen kullanıcı tabanına bağlıdır. Örneğin, herhangi bir animasyon, video veya grafik filtresi ve efekt kullanmazsanız uygulamalar her zaman daha iyi performans gösterir. Ancak, uygulama oluşturmak için Flash Platform kullanmanın nedenlerinden biri de zengin ve etkileyici uygulamalara olanak veren medya ve grafik özellikleridir. Uygulamada istediğiniz zenginlik düzeyinin uygulamanın çalıştığı makine ve aygıtların performans özellikleriyle uygun bir şekilde eşleşip eşleşmediğini düşünün. Bu konuda genel olarak verilebilecek iyi bir öneri en iyileştirme işlemini erken yapmaktan olabildiğince kaçınmak tır. Bazı performans en iyileştirmeleri, kodun daha zor okunacak veya daha az esnek bir şekilde yazılmasını gerektirir. Böyle kodlar, en iyileştirildiğinde, daha zor korunur. Bu en iyileştirmeler için, genelde kodu en iyileştirmeden önce bekleyip kodun belirli bir bölümünün başarısız performans gösterip göstermediğini belirlemek daha faydalıdır. Bazen, performansı iyileştirmek için bir denge kurmak gerekir. İdeal olarak, bir uygulama tarafından kullanılan belleği düşürmek, o uygulamanın bir görevi gerçekleştirme hızını arttırır. Ancak, ideal olan iyileştirme her zaman mümkün değildir. Örneğin, bir uygulama işlem sırasında kilitleniyorsa, çözüm genellikle işi birden fazla kare üzerinden çalıştırılacak şekilde bölmektir. İş ayrıldığından, genel olarak işlemin gerçekleşme süresinin uzaması mümkündür. Ancak, uygulama girdiye yanıt vermeye devam eder ve donmazsa kullanıcı bu ek zamanı fark etmeyebilir. Neyin en iyileştirileceği ve en iyileştirmelerin faydalı olup olmadığı konusunda fikir edinmeye ilişkin püf noktalarından biri performans testleri yapmaktır. Performansın test edilmesiyle ilgili çeşitli teknikler ve ipuçları Kıyaslama ve konuşlandırma sayfa 93 bölümünde açıklanmaktadır. Uygulamanın en iyileştirme için iyi birer aday olan parçalarının belirlenmesi hakkında daha fazla bilgi için aşağıdaki kaynakları inceleyin: AIR için performans ayarlama uygulamaları: http://www.adobe.com/go/learn_fp_goldman_tv_tr (Oliver Goldman'ın MAX konferansındaki sunumunun videosu) Performans ayarlayan Adobe AIR uygulamaları: http://www.adobe.com/go/learn_fp_air_perf_devnet_tr (Oliver Goldman'ın sunuma dayalı Adobe Developer Bağlantısı makalesi)

4 Bölüm 2: Belleği saklama Belleği saklamak, masaüstü uygulamalarında bile uygulama gelişimi açısından her zaman önemlidir. Ancak, mobil cihazlarda bellek tüketimi daha önemlidir ve uygulamanızın kullandığı bellek miktarını sınırlamakta fayda vardır. Görüntüleme nesneleri Uygun bir görüntüleme nesnesi seçin. ActionScript 3.0 büyük bir görüntüleme nesneleri kümesi içerir. Bellek kullanımını kısıtlamaya ilişkin en basit en iyileştirme ipuçlarından biri uygun bir görüntüleme nesnesi türü kullanmaktır. Etkileşimli olmayan basit şekiller için, Shape nesneleri kullanın. Bir zaman çizelgesi gerektirmeyen etkileşimli nesneler için, Sprite nesneleri kullanın. Bir zaman çizelgesi kullanan animasyonlar için, MovieClip nesneleri kullanın. Her zaman uygulamanız için en etkili nesne türünü seçin. Aşağıdaki kod farklı görüntüleme nesneleri için bellek kullanımını gösterir: trace(getsize(new Shape())); // output: 236 trace(getsize(new Sprite())); // output: 412 trace(getsize(new MovieClip())); // output: 440 getsize() yöntemi bir nesnenin bellekte kaç bayt kullandığını gösterir. MovieClip nesnesinin özelliklerine ihtiyaç yoksa basit Shape nesneleri yerine çoklu MovieClip nesnelerin kullanılması durumunda belleğin boşa kullanıldığını görebilirsiniz. İlkel türler Kodu değerlendirmek ve görev için en etkili nesneyi seçmek için getsize() yöntemini kullanın. String haricindeki tüm ilkel türler bellekte 4-8 bayt kullanır. Belleği ilkel bir tür için herhangi bir tür kullanarak en iyileştirmenin bir yolu yoktur.

Belleği saklama 5 // Primitive types var a:number; trace(getsize(a)); // output: 8 var b:int; trace(getsize(b)); // output: 4 var c:uint; trace(getsize(c)); // output: 4 var d:boolean; trace(getsize(d)); // output: 4 var e:string; trace(getsize(e)); // output: 4 64 bitlik bir değeri temsil eden bir Sayıya bir değer atanmadıysa, o sayıya ActionScript Virtual Machine (AVM) tarafından 8 bayt ayrılır. Diğer ilkel türlerin tümü 4 baytlık bölümler halinde saklanır. // Primitive types var a:number = 8; trace(getsize(a)); // output: 4 a = Number.MAX_VALUE; trace(getsize(a)); // output: 8 Davranış String türü için farklıdır. Ayrılan saklama miktarı String'in uzunluğuna bağlıdır. var name:string; trace(getsize(name)); // output: 4 name = ""; trace(getsize(name)); // output: 24 name = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularized in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."; trace(getsize(name)); // output: 1172 Kodu kıyaslamak ve görev için en etkili nesneyi seçmek için getsize() yöntemini kullanın.

Belleği saklama 6 Nesneleri yeniden kullanma Mümkünse, nesneleri yeniden oluşturmak yerine yeniden kullanın. Belleği en iyileştirmenin başka bir basit yolu nesneleri yeniden kullanmak ve mümkün olduğunda onları yeniden oluşturmaktan kaçınmaktır. Örneğin, bir döngüde, aşağıdaki kodu kullanmayın: const MAX_NUM:int = 18; const COLOR:uint = 0xCCCCCC; var area:rectangle; for (var:int = 0; i < MAX_NUM; i++) // Do not use the following code area = new Rectangle(i,0,1,10); mybitmapdata.fillrect(area,color); Her yinelemede yeni bir nesne yaratıldığından her döngü yinelemesinde Rectangle nesnesinin yeniden oluşturulması daha fazla bellek kullanır ve daha yavaştır. Aşağıdaki yaklaşımı kullanın: const MAX_NUM:int = 18; const COLOR:uint = 0xCCCCCC; // Create the rectangle outside the loop var area:rectangle = new Rectangle(0,0,1,10); for (var:int = 0; i < MAX_NUM; i++) area.x = i; mybitmapdata.fillrect(area,color); Önceki örnek daha ufak bir bellek etkisine sahip bir nesne kullandı. Bir sonraki örnek bir BitmapData nesnesi kullanarak daha büyük bellek tasarrufunu gösterir. Aşağıda bir döşeme efekti oluşturan kod bellek harcar: var myimage:bitmapdata; var mycontainer:bitmap; const MAX_NUM:int = 300; for (var i:int = 0; i< MAX_NUM; i++) // Create a 20 x 20 pixel bitmap, non-transparent myimage = new BitmapData(20,20,false,0xF0D062); // Create a container for each BitmapData instance mycontainer = new Bitmap(myImage); // Add it to the display list addchild(mycontainer); // Place each container mycontainer.x = (mycontainer.width + 8) * Math.round(i % 20); mycontainer.y = (mycontainer.height + 8) * int(i / 20);

Belleği saklama 7 Not: Pozitif değerler kullanırken, yuvarlanan değerin int öğesine dağıtılması Math.floor() yönteminin kullanılmasından çok daha hızlıdır. Aşağıdaki resim bitmap döşemenin sonucunu gösterir: Bitmap döşemenin sonucu En iyileştirilmiş bir sürüm birden fazla Bitmap örneği tarafından başvurulan ve aynı sonucu üreten tek bir BitmapData örneği oluşturur. // Create a single 20 x 20 pixel bitmap, non-transparent var myimage:bitmapdata = new BitmapData(20,20,false,0xF0D062); var mycontainer:bitmap; const MAX_NUM:int = 300; for (var i:int = 0; i< MAX_NUM; i++) // Create a container referencing the BitmapData instance mycontainer = new Bitmap(myImage); // Add it to the display list addchild(mycontainer); // Place each container mycontainer.x = (mycontainer.width + 8) * Math.round(i % 20); mycontainer.y = (mycontainer.height + 8) * int(i / 20); Bu yaklaşım yaklaşık 700 KB'lık bellek tasarrufu sağlar, bu da geleneksel bir mobil cihaz için önemli bir tasarruftur. Her bitmap kabı Bitmap özelliklerini kullanarak orijinal BitmapData örneğini değiştirmeden işlenebilir:

Belleği saklama 8 // Create a single 20 x 20 pixel bitmap, non-transparent var myimage:bitmapdata = new BitmapData(20,20,false,0xF0D062); var mycontainer:bitmap; const MAX_NUM:int = 300; for (var i:int = 0; i< MAX_NUM; i++) // Create a container referencing the BitmapData instance mycontainer = new Bitmap(myImage); // Add it to the DisplayList addchild(mycontainer); // Place each container mycontainer.x = (mycontainer.width + 8) * Math.round(i % 20); mycontainer.y = (mycontainer.height + 8) * int(i / 20); // Set a specific rotation, alpha, and depth mycontainer.rotation = Math.random()*360; mycontainer.alpha = Math.random(); mycontainer.scalex = mycontainer.scaley = Math.random(); Aşağıdaki resim bitmap dönüştürmelerinin sonucunu gösterir: Bitmap dönüştürmelerinin sonucu Daha fazla Yardım konusu Bitmap'leri önbelleğe alma sayfa 52

Belleği saklama 9 Nesne kuyruğu Mümkünse, nesne kuyruğu kullanın. Başka bir önemli en iyileştirmeye nesne kuyruğu adı verilir, nesne kuyruğu zaman içinde nesnelerin yeniden kullanımını içerir. Uygulamanızın başlatılması sırasında tanımlı bir sayıda nesne oluşturup onları bir Array veya Vector nesnesi gibi bir kuyruk içerisinde saklayabilirsiniz. Bir nesne ile gerçekleştirdiğiniz işlem tamamlandığında, onu işlemci kaynaklarını tüketmemesi için devre dışı bırakabilirsiniz ve karşılıklı başvuruları kaldırırsınız. Ancak başvuruların null değerine ayarlanması bu öğeyi çöp toplama için uygun hale getireceğinden bu işlemi gerçekleştiremezsiniz. Basitçe nesneyi kuyruğa geri koyarsınız ve yeni bir nesneye ihtiyaç duyduğunuzda geri alırsınız. Nesnelerin tekrar kullanılması, nesneleri örneklendirme ihtiyacını azaltır ve bu durum fazla çaba gerektirebilir. Bu ayrıca çöp toplayıcının uygulamanızı yavaşlatarak çalışma ihtimalini de düşürür. Aşağıdaki kod, nesne kuyruğu tekniğini gösterir: package import flash.display.sprite; public final class SpritePool private static var MAX_VALUE:uint; private static var GROWTH_VALUE:uint; private static var counter:uint; private static var pool:vector.<sprite>; private static var currentsprite:sprite; public static function initialize( maxpoolsize:uint, growthvalue:uint ):void MAX_VALUE = maxpoolsize; GROWTH_VALUE = growthvalue; counter = maxpoolsize; var i:uint = maxpoolsize; pool = new Vector.<Sprite>(MAX_VALUE); while( --i > -1 ) pool[i] = new Sprite();

Belleği saklama 10 public static function getsprite():sprite if ( counter > 0 ) return currentsprite = pool[--counter]; var i:uint = GROWTH_VALUE; while( --i > -1 ) pool.unshift ( new Sprite() ); counter = GROWTH_VALUE; return getsprite(); public static function disposesprite(disposedsprite:sprite):void pool[counter++] = disposedsprite; SpritePool sınıfı uygulamanın başlangıcında yeni nesnelerden oluşan bir kuyruk oluşturur. getsprite() yöntemi, bu nesnelerden örnekler döndürür ve disposesprite() yöntemi onları bırakır. Kod, kuyruk tamamen kullanıldığında onun büyümesine olanak verir. Ayrıca, kuyruk yorulduğunda yeni nesnelerin ayrılmayacağı sabit boyutlu bir kuyruk oluşturmak da mümkündür. Mümkünse, döngüler halinde yeni nesneler oluşturmaktan kaçının. Daha fazla bilgi için, bkz. Belleği boşaltmak sayfa 11. Aşağıdaki kod yeni örnekler almak için SpritePool sınıfını kullanır: const MAX_SPRITES:uint = 100; const GROWTH_VALUE:uint = MAX_SPRITES >> 1; const MAX_NUM:uint = 10; SpritePool.initialize ( MAX_SPRITES, GROWTH_VALUE ); var currentsprite:sprite; var container:sprite = SpritePool.getSprite(); addchild ( container ); for ( var i:int = 0; i< MAX_NUM; i++ ) for ( var j:int = 0; j< MAX_NUM; j++ ) currentsprite = SpritePool.getSprite(); currentsprite.graphics.beginfill ( 0x990000 ); currentsprite.graphics.drawcircle ( 10, 10, 10 ); currentsprite.x = j * (currentsprite.width + 5); currentsprite.y = i * (currentsprite.width + 5); container.addchild ( currentsprite ); Aşağıdaki kod fare tıklatıldığında tüm görüntüleme nesnelerini görüntüleme nesnesinden kaldırır ve daha sonra onları başka bir görev için yeniden kullanır.

Belleği saklama 11 stage.addeventlistener ( MouseEvent.CLICK, removedots ); function removedots ( e:mouseevent ):void while (container.numchildren > 0 ) SpritePool.disposeSprite (container.removechildat(0) as Sprite ); Not: Kuyruk vektörü her zaman Sprite nesnelerine başvurur. Nesneyi bellekten tamamen kaldırmak isterseniz, size SpritePool sınıfında, kalan tüm başvuruları kaldıracak bir dispose() yöntemi gerekir. Belleği boşaltmak Çöp toplamanın tetiklenmesini sağlamak için nesnelere olan tüm başvuruları silin. Flash Player ın yayınlama sürümünde çöp toplayıcıyı doğrudan başlatamazsınız. Bir nesnenin çöp olarak toplandığından emin olmak için, nesneye yapılan tüm başvuruları silin. ActionScript 1.0 ve 2.0 da kullanılan eski delete operatörünün ActionScript 3.0 da farklı davrandığını unutmayın. Operatör yalnızca dinamik nesnelerin dinamik özelliklerini silmek için kullanılabilir. Not: Adobe AIR uygulamasında ve Flash Player ın hata ayıklayıcı sürümünde çöp toplayıcısını doğrudan çağırabilirsiniz. Örneğin, aşağıdaki kod bir Sprite başvurusunu null değerine ayarlar: var mysprite:sprite = new Sprite(); // Set the reference to null, so that the garbage collector removes // it from memory mysprite = null; Şunu unutmayın ki, bir nesnenin null değerine ayarlanması bellekten kaldırılacağı anlamına gelmez. Bazen kullanılabilir bellek yeterince düşük sayılmıyorsa çöp toplayıcı çalışmaz. Çöp toplama tahmin edilemez. Nesne silme yerine bellek ayırma işlemi çöp toplamayı tetikler. Çöp toplayıcı çalıştığında, henüz toplanmamış nesne grafikleri bulur. Grafiklerde birbirine başvuran nesneleri bularak etkin olmayan ancak uygulamanın artık kullanmadığı nesneleri algılar. Bu şekilde algılanan etkin olmayan nesneler silinir. Büyük uygulamalarda, bu işlem yoğun CPU kullanımına neden olabilir, performansı etkileyebilir ve uygulamada fark edilir bir yavaşlama meydana getirebilir. Mümkün olduğunca nesneleri yeniden kullanarak çöp toplamayı kısıtlamayı deneyin. Ayrıca, mümkün olduğunda, başvuruları null olarak ayarlayın, böylece çöp toplayıcı, nesneleri bulmak için daha az işleme zamanı harcar. Çöp toplama işlemini garanti sağlayan bir işlem olarak göz önünde bulundurun ve mümkünse her zaman nesne ömürlerini açık bir şekilde yönetin. Not: Bir görüntüleme nesnesine yapılan başvurunun null olarak ayarlanması, nesnenin donduğunu garantilemez. Nesne, çöp olarak toplanana kadar CPU döngülerini kullanmaya devam eder. Başvurusunu null olarak ayarlamadan önce nesnenizi düzgün şekilde devre dışı bıraktığınızdan emin olun. Çöp toplayıcı Adobe AIR de ve Flash Player ın hata ayıklayıcı sürümünde mevcut olan System.gc() yöntemi kullanılarak başlatılabilir. Adobe Flash Builder ile paketlenen profil oluşturucu, çöp toplayıcıyı el ile başlatmanıza olanak tanır. Çöp toplayıcıyı çalıştırmak uygulamanızın nasıl yanıt verdiğini ve nesnelerin bellekten doğru bir şekilde silinip silinmediğini görmenize olanak verir. Not: Bir nesne bir olay dinleyicisi olarak kullanılmışsa, başka bir nesne ona başvurabilir. Bu durumda, başvuruları null olarak ayarlamadan önce removeeventlistener() yöntemini kullanan olay dinleyicilerini kaldırın.

Belleği saklama 12 Neyse ki, bitmap'ler tarafından kullanılan bellek miktarı hızlı bir şekilde azaltılabilir. Örneğin, BitmapData sınıfı bir dispose() yöntemi içerir. Bir sonraki örnek 1.8 MB'lık bir BitmapData örneği oluşturur. Kullanımda olan geçerli bellek 1,8 MB'a çıkar ve System.totalMemory özelliği daha küçük bir değer döndürür: trace(system.totalmemory / 1024); // output: 43100 // Create a BitmapData instance var image:bitmapdata = new BitmapData(800, 600); trace(system.totalmemory / 1024); // output: 44964 Daha sonra, BitmapData bellekten elle kaldırılır (atılır) ve bellek kullanımı bir defa daha kontrol edilir: trace(system.totalmemory / 1024); // output: 43100 // Create a BitmapData instance var image:bitmapdata = new BitmapData(800, 600); trace(system.totalmemory / 1024); // output: 44964 image.dispose(); image = null; trace(system.totalmemory / 1024); // output: 43084 dispose() yöntemi pikselleri bellekten kaldırsa da, başvuru yine de onu tamamen bırakmak için null değerine ayarlanmalıdır. Belleğin hemen boşaltılması için artık bir BitmapData nesnesine ihtiyaç duymadığınızda her zaman dispose() yöntemini çağırın ve başvuruyu null değerine ayarlayın. Not: Flash Player 10.1 ve AIR 1.5.2, System sınıfında disposexml() adlı yeni bir yöntem sunar. Bu yöntem XML ağacını bir parametre olarak ileterek bir XML nesnesini anında çöp toplamaya uygun hale getirir. Daha fazla Yardım konusu Nesneleri dondurma ve çözme sayfa 26 Bitmap'leri kullanma Bitmap'ler yerine vektörlerin kullanılması bellek kazanmanın iyi bir yoludur. Ancak, özellikle yüksek sayıda vektör kullanımı, işlemci ve GPU kaynağı ihtiyacını önemli ölçüde artırır. Çalışma zamanı ekranda piksel çizmek için vektör içeriği oluşturmaya kıyasla daha az işleme kaynağı gerektireceğinden, bitmap kullanmak, oluşturmayı en iyileştirmek için iyi bir yoldur. Daha fazla Yardım konusu Bitmap'leri elle önbelleğe alma sayfa 60

Belleği saklama 13 Bitmap altörnekleme Belleği daha etkili bir şekilde kullanmak için, Flash Player bir 16-bit ekran algıladığında 32-bit opak görüntüler 16-bit görüntülere indirgenir. Bu altörnekleme, bellek kaynaklarının yarısını tüketir, ve görüntüler daha hızlı oluşturulur. Bu özellik yalnızca Windows Mobile için Flash Player 10.1'de mevcuttur. Not: Flash Player 10.1'den önce bellekte oluşturulan tüm pikseller 32 bit'lik (4 bayt) bölümler halinde saklanıyordu. 300 x 300 piksellik basit bir logo 350 KB'lık bellek harcıyordu (300*300*4/1024). Bu yeni davranışla, aynı opak logosu yalnızca 175 KB harcar. Logo saydamsa, 16 bit e aşağı örneklenmez ve bellekte aynı boyutta yer kaplar. Bu özellik yalnızca gömülü bitmap'ler veya çalışma zamanında yüklenmiş görüntüler (PNG, GIF, JPG) için geçerlidir. Mobil cihazlarda, 16 bit ile oluşturulan bir görüntüyle 32 bit ile oluşturulan aynı görüntü arasındaki farkı anlamak zor olabilir. Yalnızca birkaç renk içeren basit bir görüntü için, algılanabilir bir fark yoktur. Daha karmaşık bir görüntü için bile farkları algılamak zordur. Ancak, resmi yakınlaştırırken az miktarda renk bozulması olabilir ve bir 32 bit degrade görüntü 16 bit olanından daha düzgün görünebilir. Tekli BitmapData başvurusu Örnekleri mümkün olduğunca tekrar kullanarak BitmapData sınıfının kullanımını en iyileştirmek önemlidir. Flash Player 10.1 ve AIR 2.5, tüm platformlar için tekli BitmapData başvurusu adında yeni bir özellik sunar. Gömülü görüntüden BitmapData örnekleri oluştururken, bütün BitmapData örnekleri için tek bir bitmap sürümü kullanılır. Bir bitmap daha sonra değiştirilirse, ona bellekte kendi benzersiz bitmap i verilir. Gömülü görüntü, kütüphaneden veya bir [Embed] etiketinden gelebilir. Not: Ayrıca, Flash Player 10.1 ve AIR 2.5, bitmap'leri otomatik olarak yeniden kullandığından mevcut içerik de bu özellikten faydalanır. Gömülü bir görüntüyü örneklediğiniz zaman bellekte ilişkili bir bitmap oluşturulur. Flash Player 10.1 ve AIR 2.5'ten önce, aşağıdaki şemada gösterildiği gibi bellekte her örneğe ayrı bir bitmap veriliyordu: Bellekteki Görüntülenen Bitmap Kaynağı Logo Örneği Bitmap Kaynağı Logo Örneği Flash Player 10.1 ve AIR 2.5 öncesinde bellekteki bitmap'ler Flash Player 10.1 ve AIR 2.5'te, aynı görüntünün birden fazla örneği oluşturulduğunda, tüm BitmapData örnekleri için bitmap'in tek bir sürümü kullanılır. Aşağıdaki şema bu kavramı gösterir:

Belleği saklama 14 Bellekteki Görüntülenen Logo Örneği Bitmap Kaynağı Logo Örneği Flash Player 10.1 ve AIR 2.5'te bellekteki bitmap'ler Bu yaklaşım bir uygulama tarafından birçok bitmap ile kullanılan bellek miktarını önemli ölçüde düşürür. Aşağıdaki kod bir Star sembolünün birden fazla örneğini oluşturur: const MAX_NUM:int = 18; var star:bitmapdata; var bitmap:bitmap; for (var i:int = 0; i<max_num; i++) for (var j:int = 0; j<max_num; j++) star = new Star(0,0); bitmap = new Bitmap(star); bitmap.x = j * star.width; bitmap.y = i * star.height; addchild(bitmap) Aşağıdaki resim kodun sonucunu gösterir:

Belleği saklama 15 Birden fazla sembol örneği oluşturacak kod sonucu Örneğin, Flash Player 10 ile yukarıdaki animasyon 1008 KB bellek kullanır. Flash Player 10.1 ile, masaüstü ve mobil aygıttaki animasyon yalnızca 4 KB kullanır. Aşağıdaki kod bir BitmapData örneğini değiştirir: const MAX_NUM:int = 18; var star:bitmapdata; var bitmap:bitmap; for (var i:int = 0; i<max_num; i++) for (var j:int = 0; j<max_num; j++) star = new Star(0,0); bitmap = new Bitmap(star); bitmap.x = j * star.width; bitmap.y = i * star.height; addchild(bitmap) var ref:bitmap = getchildat(0) as Bitmap; ref.bitmapdata.pixeldissolve(ref.bitmapdata, ref.bitmapdata.rect, new Point(0,0),Math.random()*200,Math.random()*200, 0x990000); Aşağıdaki görüntü bir Star örneğini değiştirmenin sonucunu gösterir:

Belleği saklama 16 Bir örneği değiştirmenin sonucu Dahili olarak, piksel değiştirmeleri işlemek için çalışma zamanı otomatik şekilde bellekte bir bitmap atar ve oluşturur. BitmapData sınıfının bir yöntemi çağrıldığında, piksel değiştirilmelerine yol açar, bellekte yeni bir örnek oluşturulur ve başka herhangi bir örnek güncellenmez. Aşağıdaki resim bu kavramı gösterir: Bellekteki Görüntülenen Logo Örneği Bitmap Kaynağı Logo Örneği setpixel() Bitmap Kaynağı Logo Örneği Bir bitmap'i değiştirmenin bellekteki sonucu Tek bir yıldız değiştirilirse, bellekte yeni bir kopya oluşturulur. Sonuçta elde edilen animasyon, Flash Player 10.1 ve AIR 2.5'te bellekten yaklaşık 8 KB kullanır.

Belleği saklama 17 Önceki örnekte, her bitmap ayrı ayrı dönüştürme için kullanılabilir. Yalnızca döşeme efekti oluşturmak için beginbitmapfill() yöntemi en uygun yöntemdir: var container:sprite = new Sprite(); var source:bitmapdata = new Star(0,0); // Fill the surface with the source BitmapData container.graphics.beginbitmapfill(source); container.graphics.drawrect(0,0,stage.stagewidth,stage.stageheight); addchild(container); Bu yaklaşım yalnızca tek bir BitmapData örneğinin oluşturulmasıyla aynı sonucu üretebilir. Yıldızları sürekli olarak döndürmek için her Yıldız örneğine erişmek yerine her karede döndürülen bir Matrix nesnesi kullanın. Bu Matrix nesnesini beginbitmapfill() yöntemine iletin: var container:sprite = new Sprite(); container.addeventlistener(event.enter_frame, rotate); var source:bitmapdata = new Star(0,0); var matrix:matrix = new Matrix(); addchild(container); var angle:number =.01; function rotate(e:event):void // Rotate the stars matrix.rotate(angle); // Clear the content container.graphics.clear(); // Fill the surface with the source BitmapData container.graphics.beginbitmapfill(source,matrix,true,true); container.graphics.drawrect(0,0,stage.stagewidth,stage.stageheight); Bu tekniği kullanırken, efekti oluşturmak için herhangi bir ActionScript döngüsüne gerek yoktur. Çalışma zamanı her şeyi dahili olarak gerçekleştirir. Aşağıdaki resim yıldızları dönüştürmenin sonucunu gösterir:

Belleği saklama 18 Döndürülen yıldızların sonucu Bu yaklaşımla, orijinal kaynak BitmapData nesnesinin güncellenmesi otomatik olarak onun sahne alanındaki herhangi başka bir yerdeki kullanımını günceller, bu da etkili bir teknik olabilir. Ancak, bu yaklaşım her yıldızın önceki örnekteki gibi teker teker ölçeklendirilmesine olanak tanımaz. Not: Aynı görüntünün birden fazla örneğini kullanırken, çizim bir sınıfın bellekteki orijinal bitmap ile ilişkili olup olmadığına bağlıdır. Bitmap ile ilişkili bir sınıf yoksa, görüntüler bitmap dolguları ile Shape nesneleri olarak çizilir. Filtreleri ve dinamik bitmap'i kaldırma Pixel Bender üzerinden işlenen filtreler dahil olmak üzere filtre kullanımından kaçının. Piksel Bükme ile mobil aygıtlarda işlenen filtreler de dahil olmak üzere, filtreler gibi etkilerin kullanımını en aza indirmeye çalışın. Bir görüntüleme nesnesine bir filtre uygulandığında, çalışma zamanı bellekte iki bitmap oluşturur. Bu bitmap'lerin her biri görüntüleme nesnesinin boyutundadır. Birincisi, görüntüleme nesnesinin rasterleştirilmiş bir versiyonu olarak oluşturulur ve sonrasında uygulanan filtre ile ikinci bir bitmap üretmek için kullanılır.

Belleği saklama 19 Bellekteki Görüntülenen Filtrelenmemiş bitmap versiyonu Sonuç Filtrelenmiş bitmap versiyonu Filtre uygulandığında bellekte bulunan iki bitmap Bir filtrenin özelliklerinden birini değiştirirken, ortaya çıkacak bitmap'in oluşturulması için bitmap'lerin ikisi de bellekte güncellenir. Bu işlem biraz CPU işleme gerektirir ve iki bitmap önemli bir miktar bellek kullanabilir. Flash Player 10.1 ve AIR 2.5, tüm platformlarda yeni bir filtreleme davranışı sunar. Filtre 30 saniye içinde değiştirilmezse veya gizli veya ekran dışı ise, filtrelenmemiş bitmap tarafından kullanılan bellek boşaltılır. Bu özellik tüm platformlarda bir filtre tarafından kullanılan belleğin yarısından tasarruf sağlar. Örneğin, bir bulanıklaştırma filtresi uygulanan bir metin nesnesi düşünün. Bu durumda metin basit dekorasyon için kullanılır ve değiştirilmez. 30 saniye sonra, bellekteki filtrelenmemiş bitmap boşaltılır. Metin 30 saniye boyunca gizli veya ekran dışı kalırsa aynı sonuç gerçekleşir. Filtre özelliklerinden biri değiştirilirse, bellekteki filtrelenmemiş bitmap yeniden oluşturulur. Bu özelliğe dinamik bitmap kaldırılması denir. Bu en iyileştirmelerde bile filtrelere dikkat edin; çünkü filtreler değiştirilirken yine de çok büyük miktarda işlemci veya GPU işlemesi gerektirir. Mümkün olduğunda filtreleri taklit etmek için Adobe Photoshop gibi bir geliştirme aracı üzerinden oluşturulmuş bitmap'lerin kullanılması iyi bir uygulamadır. ActionScript te çalışma zamanında oluşturulmuş dinamik bitmap'leri kullanmaktan kaçının. Harici olarak geliştirilmiş bitmap'lerin kullanılması, özellikle filtre özellikleri zaman içinde değişmediğinde, çalışma zamanının işlemci veya GPU yükünü azaltmasına yardımcı olur. Mümkünse bir bitmap üzerinde ihtiyaç duyduğunuz tüm efektleri geliştirme aracında oluşturun. Bitmap i çalışma zamanında üzerinde hiçbir işlem yapmadan görüntüleyebilirsiniz, bu işlem çok daha hızlı olabilir. Doğrudan mipmap oluşturma Gerekirse, büyük görüntüleri ölçeklendirirken mipmap oluşturma özelliğini kullanın. Flash Player 10.1 ve AIR 2.5'te mevcut olan başka yeni bir özellik mipmap oluşturmayla ilgilidir. Flash Player 9 ve AIR 1.0, ölçeği küçültülmüş bitmap'lerin kalite ve performansını iyileştiren bir mipmap oluşturma özelliği sunmuştu.

Belleği saklama 20 Not: Mipmap oluşturma özelliği yalnızca dinamik olarak yüklenmiş görüntüler veya gömülü bitmap'ler için geçerlidir. Mipmap oluşturma filtrelenen veya önbelleğe alınan görüntüleme nesnelerine uygulanmaz. Mipmap oluşturma yalnızca bitmap çift sayı olan bir genişlik ve yüksekliğe sahipse işlenebilir. Tek sayı olan bir genişlik veya yükseklikle karşılaşıldığında, mipmap oluşturma durur. Örneğin, 250 x 250 boyutunda bir görüntüye 125 x 125 olacak şekilde mipmap oluşturma uygulanabilir ancak daha fazlası uygulanamaz. Bu durumda, boyutların en az bir tanesi tek sayıdır. İkinin üsleri olan boyutlara sahip bitmap'ler en iyi sonuçları verir, örneğin: 256 x 256, 512 x 512, 1024 x 1024, vb. Örneğin, 1024 x 1024 boyutunda bir görüntünün yüklü olduğunu ve bir geliştiricinin görüntüyü galeride bir minik resim oluşturmak için ölçeklemek istediğini düşünün. Mipmap oluşturma özelliği, bitmap'in orta seviye altörnekleme versiyonları kullanılarak ölçeklendirildiğinde görüntüyü düzgün bir şekilde oluşturur. Çalışma zamanının önceki sürümleri bellekte bitmap'in orta seviye altörneklenmiş sürümlerini oluşturuyordu. 1024 x 1024 boyutlarında bir görüntü 64 x 64 şeklinde yüklenip görüntülendiğinde, çalışma zamanının eski sürümleri yarı boyutlu bitmap'lerin her birini oluştururdu. Örneğin, bu durumda 512 x 512, 256 x 256, 128 x 128 ve 64 x 64 bitmap'ler oluşturulurdu. Şimdi, Flash Player 10.1 ve AIR 2.5 istenen hedef boyuta doğrudan orijinal kaynaktan mipmap oluşturmayı destekliyor. Önceki örnekte, yalnızca 4 MB (1024 x 1024) orijinal bitmap ve 16 KB (64 x 64) mipmap'i oluşturulmuş bitmap oluşturuluyordu. Mipmap oluşturma mantığı ayrıca dinamik bitmap kaldırma özelliğiyle de çalışır. Yalnızca 64 x 64 bitmap kullanılıyorsa, 4 MB orijinal bitmap bellekten boşaltılır. Mipmap'in yeniden oluşturulması gerekiyorsa, orijinal bitmap yeniden yüklenir. Ayrıca, çeşitli boyutlarda başka mipmap'i oluşturulmuş bitmap'ler gerekiyorsa, bitmap'in oluşturulması için bitmap'lerin mipmap zinciri kullanılır. Örneğin, bir 1:8 bitmap oluşturulması gerekiyorsa, hangisinin belleğe ilk yüklendiğini belirlemek amacıyla 1:4 ve 1:2 ve 1:1 bitmap'ler incelenir. Başka versiyonlar bulunmazsa, kaynaktan 1:1 orijinal bitmap yüklenir ve kullanılır. JPEG açıcısı kendi biçiminde mipmap oluşturma işlemini gerçekleştirebilir. Bu doğrudan mipmap oluşturma işlemi, büyük bir bitmap in sıkıştırılmamış görüntünün tamamı yüklenmeden doğrudan bir mipmap biçimi şeklinde açılmasına olanak tanır. Mipmap'in oluşturulması önemli ölçüde daha hızlıdır; büyük bitmap'ler tarafından kullanılan bellek ayrılmaz ve sonra boşaltılır. JPEG görüntü kalitesi genel mipmap oluşturma tekniğine yakındır. Not: Mipmap oluşturma işlevini gereğinden fazla kullanmayın. Bu işlev, küçük boyuta ölçeklenmiş bitmap'lerin kalitesini arttırsa da bant genişliğini, belleği ve hızı etkiler. Bazı durumlarda bitmap in harici bir araçta önceden ölçeklendirilmiş biçimini uygulamanıza içe aktarıp kullanmak daha iyi bir seçenektir. Amacınız küçülterek ölçeklendirmekse büyük boyutlu bitmap'lerle işleme başlamayın. 3B efektlerini kullanma 3B efektlerini el ile oluşturmayı göz önünde bulundurun. Flash Player 10 ve AIR 1.5, görüntüleme nesnelerine perspektif dönüştürme uygulamanıza olanak veren bir 3B motoru sundu. Bu dönüştürmeleri rotationx ve rotationy özelliklerini veya Graphics sınıfının drawtriangles() yöntemini kullanarak uygulayabilirsiniz. Ayrıca z özelliğiyle derinlik uygulayabilirsiniz.. Her perspektifi dönüştürülmüş görüntüleme nesnesinin bir bitmap olarak rasterleştirildiğini ve bundan dolayı daha fazla bellek gerektirdiğini aklınızda tutun. Aşağıdaki şekil perspektif dönüştürme kullanılırken rasterleştirme tarafından üretilen kenar yumuşatmayı gösterir:

Belleği saklama 21 Perspektif dönüştürme sonucu ortaya çıkan kenar yumuşatma Kenar yumuşatma, vektör içeriğinin bitmap olarak dinamik bir şekilde rasterleştirilmesinin sonucudur. Bu kenar yumuşatma, AIR ve Flash Player'ın masaüstü sürümünde ve mobil için AIR 2.0.1 ve AIR 2.5'te 3B efektler kullandığınızda gerçekleşir. Ancak mobil aygıtlar için Flash Player'a kenar yumuşatma uygulanmaz. 3B efektinizi yerel API'ye dayanmadan elle oluşturabiliyorsanız, bu da bellek kullanımını azaltabilir. Ancak Flash Player 10 ve AIR 1.5'te tanıtılan yeni 3B özellikleri doku eşlemeyi drawtriangles() gibi yöntemler sayesinde çok daha kolay bir hale getirir. Bir geliştirici olarak, oluşturmak istediğiniz 3B efektin yerel API tarafından işlendiğinde mi yoksa elle mi daha iyi performans sağladığına karar verin. Bellek kullanımının yanı sıra ActionScript çalıştırma ve oluşturma performansını da dikkate alın. rendermode uygulama özelliğini GPU olarak ayarladığınız AIR 2.0.1 ve AIR 2.5 mobil uygulamalarda GPU, 3B dönüştürmeleri yapar. Ancak rendermodecpu olursa, 3B dönüştürmeleri GPU değil, CPU gerçekleştirir. Flash Player 10.1 uygulamalarında CPU, 3B dönüştürmeleri gerçekleştirir. CPU 3B dönüştürmeler yaptığında, bir görüntüleme nesnesine herhangi bir 3B dönüştürmenin uygulanmasının bellekte iki bitmap gerektireceğini dikkate alın. Bir bitmap kaynak bitmap için ve ikinci bir bitmap de perspektifi dönüştürülmüş sürüm içindir. Bu şekilde 3B dönüştürmeleri filtrelere benzer bir yöntemle çalışır. Sonuç olarak, CPU 3B dönüştürmeler yaptığında, 3B özelleri tutumlu şekilde kullanın. Metin nesneleri ve bellek Salt okunur bir metin için Adobe Flash Metin Motorunu kullanın; giriş metni için TextField nesneleri kullanın. Flash Player 10 ve AIR 1.5, sistem belleğinden tasarruf sağlayan güçlü bir yeni metin motoru olan Adobe Flash Metin Motoru'nu (FTE) sunmuştu. Ancak, FTE üzerine flash.text.engine paketinde sağlanan ek bir ActionScript 3.0 katmanı gerektiren düşük düzeyli bir API'dir.

Belleği saklama 22 Salt okunur metinler için, düşük bellek kullanımı ve daha iyi oluşturma sunan Flash Metin Motoru kullanılması en iyisidir. Giriş metni için, girdi işleme ve kelime sarma gibi genel davranışlar oluşturmak için daha az ActionScript gerektiğinden, TextField nesnelerini kullanmak daha iyi bir seçimdir. Daha fazla Yardım konusu Metin nesneleri oluşturma sayfa 66 Olay modeli ile geri aramaların karşılaştırması Olay modeli yerine basit geri aramalar kullanmayı düşünün. ActionScript 3.0 olay modeli nesne gönderme kavramına dayanır. Olay modeli nesne yönelimlidir ve kodun yeniden kullanımı için en iyileştirilmiştir. dispatchevent() yöntemi dinleyici listesi üzerinden döngüde ilerler ve kayıtlı her nesnede olay işleyicisini çağırır. Ancak olay modelinin dezavantajlarından biri uygulamanızı kullandığınız süre boyunca çok sayıda nesne oluşturacak olmanızdır. Zaman çizelgesinden animasyon dizisinin sonunu gösteren bir olay göndermeniz gerektiğini düşünün. Bildirimin tamamlanması için, aşağıdaki örnekte gösterildiği gibi zaman çizelgesindeki belirli bir kareden olay gönderebilirsiniz: dispatchevent( new Event ( Event.COMPLETE ) ); Document sınıfı bu olayı aşağıdaki kod satırıyla dinleyebilir: addeventlistener( Event.COMPLETE, onanimationcomplete ); Bu yaklaşım doğru olsa da, yerel olay modelinin kullanılması daha yavaş olabilir ve klasik bir geri çağırma işlevi kullanmak işlemine göre daha fazla bellek kullanabilir. Olay nesneleri bellekte oluşturulmalı ve ayrılmalıdır; bu da performansta düşüşe neden olur. Örneğin Event.ENTER_FRAME olayını dinlerken olay işleyicisi için her karede yeni bir event nesnesi oluşturulur. Özellikle görüntüleme nesneleri için, görüntüleme listesi karmaşıksa zor olabilen olayı dıştan içe ve içten dışa tetikleme aşamaları nedeniyle performans yavaş olabilir.

23 Bölüm 3: 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.