Blog Archive

Monday, March 12, 2012

Daha hızlı bir Flash Builder

Tüm geliştiricilerin hızla yayılan modaya uygun olarak HTML5'e kaydığı Adobe'nin bile HTML5'e yönlendirme yaptığı şu günlerde halen Flex framework'un enterprise ölçekteki bir projede, yönetim paneli geliştirmek için biçilmiş kaftan olduğunun farkında olan ve kullanan insan sayısı da hızla azalıyor.

Flex framework'ü terketmeye zaten niyetli pek çok kişi için, bulunan bahanerlerden birisi de Büyük ölçekli projelerdeki performans sorunları. Pek çok teknolojide bir sorunla karşılaşıldığında çözüm aranır, Flash platform söz konusu olduğunda ise bahane aranıyor.


Kabul etmek gerek Adobe, Macromedia'yı satın aldığından  beri, flash platform, performans sorunları ile boğuşuyor. Ayrıca Eclipse kendi başına hantal bir IDE iken Flash platformun sorunları ile iyice kötüye gidiyor. Yani aslında Eclipse Flash projes geliştirmek için başından beri yanlış ortam. Tüm bu olumsuzluklara rağmen, sizde ısrarla yada mecburen Flash platformda proje geliştiriyorsanız, performans problemlerini aşmak için yapılması gerekenleri dereyip topladım ve buraya yazıyorum. Birileri için yararlı olacağını umuyorum.

1. Embed dosyalar:

Embed edilen yani proje içine gömülen dosyalar, değişebilen veriler değildir. Bu nedenle her derlemeye katılmamalıdır. Ancak embed ile kastettiğimiz dosyaların arasına fontları dahil etmiyoruz. O ayrı bir maddede incelenecek.  Embed dosyaları ayrı bir Library projede toplayın, O Library projesinde Embed dosyaları bir class içinde static sabitler olarak belirleyebilirsiniz. Bu Library projesini swc olarak ve RSL (Runtime Shared Library) asıl projenize dahil edebilirsniz.
Package Explorer içinde boş bir yere sağ tıklayarak bu menüye ulaşabilirsiniz.


Library projesi içinde Embed dosyalar için bir class oluşturun ve  tüm Embed dosyalarınızı bu  class içinde  tanımayın.

Projenizin üzerine sağ tıklayın be propeties seçeneğpine tıklayın. Böylece proje özellikleri penceresini açmış olacaksınız.

Flex Build Path sekmesinde Add Project butonuna tıklayın.
Workspace içindeki Library projeleri listesinden, Oluşturduğunuz Library Projesini seçip OK butonuna basınız
Library Projeleri listesinden, eklediğimiz projeyi seçip, LinkType üzerine çift tıklıyoruz.
Burada LinkType olarak Runtime Shared Library seçeneğini seçiyoruz
Add butonuna basıp, Library projemizin dosya adını belirliyoruz. Browser cache'inden kurtulmak için dosyanın sonuna bir versiyon numarası yazın ve her güncellemede bu versiyon numarasını değiştirin.
Bu işlemden sonra OK butonları ile açık tüm pencereleri kapatabiliriz.

2. Embed fontlar: 

Embed dosyalar gibi embed fontlar da harici bir dosyada tutulmalıdır. Bu işlem için sadece embed fontlerın yer aldığı css dosyasını swf olarak derlemek gereklidir.
Fontları embed etme işini ayrı bir css dosyası içinde yapın. Çünkü bu css dosyasını swf olarak derleyeceğiz ve runtime'da projeye dahil edeceğiz.
Komut satırından css dosyasını mxmlc(flex compiler) yardımıyla derliyoruz. Bu aşamada yukarıdaki hataları alırsanız önemsizdir. Framework dosyalarını da export etmek istiyor ancak framework config dosyasında uzak bir bağlantı adresi kullanıldığı için bu hataları veriyor. Ancak css ile ilgili bir hata alırsanız hatanızı düzeltiniz.
Oluşturduğumuz derlenmiş css dosyasını projemize ActionScript ile ekliyoruz. Böylece fontları derlemek için de ek bir performans harcanmayacak.

3. Modüller:

Projeyi modüller halinde geliştirmek en doğru seçim. Flex Framework s:Module bieşenini içerir. Bir yönetim panelinin farklı ekranları farklı modüller içinde yazılabilir. Her bir module ayrı bir swf olarak derlenir ve runtime 'da projeye dahil edilir. Derleme esnasında sadece değişiklik yapılmış modüller yeninden derlenir. Bu da tüm projenin derlenmesinden daha iyidir. Ancak embed fontlar için oluşurduğumuz swf dosyasını modüller içinde de ayrıca çağırmamız gerekir.
Yeni modül oluşturmak için modülün bulunacağı klasörün üzerine sağ tıklayıp New->MXML Module seçeneğini seçin. Proje derlendiğinde Modülden oluşan swf dosyası yine aynı klasör içinde olacaktır.
Modülünüzü Projeye göre optimize ederseniz, daha düşük boyutlu olacaktır.
Modülü yüklemek için Flex Fremework'e ait ModuleLoader kullanabileceğiniz gibi kendi ModuleLoad sınfınızı da oluşturabilirsiniz. Eğer yeterince uzmansanız, kendi ModuleLoader sınıfınız ile parametrik bilgileri de Modül içine geçirebilirsiniz.

4. Eclipse Heap Status:

Eclipse, malesef hafıza organizasyonu bakımından çok başarılı bir IDE değil. İlk açıldığı anda yüksek performans ile çalışırken zamanla performansının düştüğünü siz de farketmiş olmalısınız. Eclipse IDE'nin manuel çalışan bir Grabage Collector aracı var. 
Window Menüsünden Prefencences seçeneğini seçin.
General başlığında Show Heap Status seçeneğini işaretleyin ve OK butonuna basın
Hep Status Aracı pencrenin sağ alt köşesinde belirecektir, onu istediğiniz yere taşıyabilirsiniz. Sarı bar kullanılan heap ram miktarını gösterir. Biraz çalıştıkç bunun arttığını gözlemleyebilirsiniz. Böyle durumlarda çöp kutusu ikonlu butona basıp, belleği temizleyebilirsiniz.

5. Oracle JRockit:

Standard javaya göre JROckit daha yüksek performans sağlamaktadır. Flashbuilder'i standalone olarak kullanıyorsanız, program kendi içinde kullancağı JRE ile birlikte yüklenir. JRockit kullanmak için Oracle JRockit 'i indirip bilgisayarınıza kurun.

Ardından Flash Builder'in yüklü olduğu dizini açıp FlashBuilder.ini dosyasını bulun. Öncelikle bu dosyayı yazılabilir olarak ayarlamalısınız.
Açtığnız dosyanın orjinali şu şekildedir:

-startup
plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519
-nl
en_US
-vmargs
-Xms256m
-Xmx512m
-XX:MaxPermSize=256m
-XX:PermSize=64m
-Djava.net.preferIPv4Stack=true
-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=dropins



Bu dosyayı şu şekilde düzenleyin:

-showsplash
org.eclipse.platform
-vm "C:Program Files/Java/jrockit-jdk1.6.0_29-R28.2.2-4.1.0/bin/javaw.exe"
-startup
eclipse/plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20110502
--launcher.defaultAction
openFile
-nl
en_US
-vmargs
-Xms512m
-Xmx1024m
-XgcPrio:deterministic
-XpauseTarget:20
-XXcompactratio:1
-XX:MaxPermSize=256m
-XX:PermSize=64m
-XX:+UseParallelGC
-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=eclipse/dropins
-Declipse.application=com.adobe.flexbuilder.standalone.FlashBuilderApplication


Burada -Xms512m ve -Xmx1024m değerleri biraz yüksek değerlerdir. Benim bilgisayrım i5 işlemcili ve 8GB ram'li, Kendi bilgisayarınızın performansını buna göre kıyaslayıp daha yüksek ve daha düşük değerler verebilirsiniz. Ayrıca -vm parametresinde pelirtilen JRocket yolunu da kendi bilgisayarınıza göre uyarlamayı unutmayın.

Son olarak Eclipse içinden JRE path'ini tanımlamak gerekli.
Window->Preferences menüsünden Installed JRE's başlığına gelin ve ADD butonuna tıklayın.
Burada Standard JVM seçenği ile Next diyoruz
Directory butonuna basıp JRockit'in yüklü olduğu dizini seçiyoruz.  Son olarak Finish butonuna basıp bitiriyoruz.

6. Ant Builder ile multi thread MXMLC compile:

Henüz bunu test edemedim ama meraklısı için buradaki makale faydalı olacaktır.

Followers