Flash sucks ! .. ?


I jak to jest z tym flashem ? Jedni go kochają inni nie nawidzą. Faktem jest, że moja opinia tutajmoże nie być do końca super obiektywna. Dzieje się tak dlatego, że Adobe Flash/Flex i Ruby/Rails są moimi narzędziami w codziennej pracy, a więc i powodem dla którego mam prąd, żeby móc tu pisać. Jednak samo to, że ja i setki osób dostają gotówke za zabawe jendym i drugim, musi świadczyć, że nie do końca jest to do niczego.


Jest to strasznie archaiczny stereotyp, ale mimo wszystko niektórzy dalej kojarzą słowo flash z banerami i kolorowymi reklamami tworzonymi przez grafików. Tak i owszem kiedyś było, ale tyle w tym odbicia rzeczywistości co w tym, że musze polować na dziki w lesie, żeby zjeśc kolacje. To sie definitywnie skończyło, wraz z magicznym słowem RIA(Rich Internet Application), które gości coraz szerzej na rynku IT.


Ten właśnie magiczny znaczek, pod którego szyldem teoretycznie rozpoczął się rok 2008 (który, według niektórych właśnie miałbyś rokiem RIA) powoduje to, że nasze aplikacje maja coraz bardziej przypominać te deksktopowe - stary banał. Jednak ta powolna ewolucja jest coraz bardzej widoczna. Cały ciężar odpowiedzialności za nasze poczynania na pulpicie komputera, jest przenoszony coraz bardziej w strone przeglądarki i coraz cześciej to co mogę zrobic na pulpicie, desktopie, moge też zrobić w podobnej aplikacji www.

Skoro mowa właśnie o flashu, trzeba spojrzec prawdzie w oczy i zauwazyć jak owe RIA jest realizowane. Są dwie drogi:

1) Javascript/Ajax - tony javascriptu, realizowane przez szereg frameworków: JQuery, Prototype, Mootools, Google GWT, DOJO, ExtJS, YUI
2) Flash - czyli ActionScript 3, w oparciu o np. Adobe Flex.


Oczywiście są to dwie podstawowe technologie, wokół których zawsze można wymienić dużo różnych frameworków jak Curl, Appcelerator, etc. Nie to jest jednak problemem, pojawia się on natomiast wtedy kiedy między tymi dwoma technologiami trzeba dokonać wyboru. Sprawa nie jest prosta, samo słowo RIA, oznacza, że trzeba dać końcowemu użytkownikowi swobodę, elastyczność i funkcjonalnośc, którą może on spotkać w swoich desktopowych aplikacjach.

Wszystko ma swoje zalety i wady jak w każdej porządnej bajce przystało. Patrząc na Google Maps, Google Docs, czy niektóre aplikacje zrobione np w ExtJS, widać, że Javascript naprawde potrafi sobie świetnie radzić z niektórymi problemami. Jednak aplikacje przeładowane JS jak i sam sposób ich tworzenia (oczywiście zalezy do od frameworków) nie należy do najprzyjemniejszych. Ponadto są problemy, których rozwiązać się poprzez JS nie da.

Prosty przykład: Hobnox Player - właściwy przykład RIA, nie osiągalne jest to na razie przynajmniej na poziomie Javascriptu - a przynajmniej bardzo pracochłonne.

W wyborze obu technologii jako pierwszy punkt wprowadziłbym dość abstrakcyjny termin, mianowicie - granulacja warstwy prezentacji. Ten termin określałby poziom elastyczności interfejsów możliwy do uzyskania w danym środowisku. Mimo, że obecnie jest możliwe w JQuery lub czymś innym wprowadzenie animacji, to w dalszym ciągu nie jest to nawet połowa tego co zrobić mozna w środowisku Flash. To tak jakby położyć przed programistą dwie kartki, jedna kartka ma kratki, druga jest czysta. Teraz mówimy im, że mają mają rysować rożne kształty, jednak ten od kratkowanej kartki (JS) może poruszać sie tylko i wyłacznie po liniach.

Kiedyś z jedną z kluczowych spraw było też pytanie: czy chcesz skupić sie na prezentacji tekstów (Ajax/JS) -> portal, czy raczej aplikacji intranetowej (Flash/Flex) ? Teraz dzieki indeksowaniu plików swf troche to pytanie stracio na ważności, ale mimo wszystko "htmlowe" podejście w portalach sprawuje się narazie lepiej.

Jakie są jednak wady aplikacji zbudowanych na platformie Flash ? Przede wszystkim wydajność (kiedyś). Zaobserwować to można głównie jeśli ktoś ma system spod znaku pingwina. Próbowałem ostatnio przynajmniej w laptopie przesiąść się na Ubuntu, nie powiodło się to głównie z powodu fatalnej w tym środowisku wydajności flash playera. W niektórych aplikacjach przypominało to już praktycznie pokaz slajów niż coś związanego z animacją. Drugą sprawą jest rozmiar niektórych aplikacji i czas ich ładowania do przeglądarki.
To się jednak także zmienia, jesli mówimy o Adobe Flex (czyli środowisku flash dla programistów) to przede wszystkim można w nowych Flash Playerze 10... cachować framework flexa, bo faktem jest, że nawet jesli tworzymy killer app hello world, to zawsze flex wkompiluje w wynikowego swf'a wszystkie swoje biblioteki - i je własnie można cachować.

Druga sprawą jest wydajność, tu z pomoca przychodzi np. projekt pod nazwą Adobe Alchemy w skrócie stanowi most pomięcy C/C++ a Flashem, mający pomóc w wykorzystaniu sprzętu przez flash playera. Zagadnienie jest dośc ciekawe i polecam osobom, które się zainteresują sięgnięcie po coś o nazwie Tamarin czy po naszemu tak naprawde Adobowy AVM2 (ActionScript Virtual Machine 2). Tą technologie dość dobrze rozbudowali Japończycy (japońskie tricki), którzy jednak niechętnie piszą po angielsku, mimo to warto popatrzec na niektóre linki i znaleźć coś co nazywa sie avmshell. Reasumując aplikacje oparte na Flash Playerze wcale nie muszą być już wolne, szczególnie wspomagane np akceleracją karty graficznej. (jest przykład takiej aplikacji- edytor audio, ale nie pamiętam linka).

Pora spojrzec na środowisko naszej pracy. Pracując z Ajaxem/JS oczywiście mamy do wyboru sporo dobrych frameworków. Sporo jest testów nie ma sensu tego powtarzać, ja osobiście lubie JQuery i YUI, skoro stoi za nim taka korporacja. Co do środowiska Flash, to jest oczywiście narzędzie do programistów, którego używamy na codzien - Adobe Flex. Jest co nic innego jak framework dla AS3 składający się z gotowych komponentów/modułów przyspieszających prace - prosto rzecz ujmując. Jednak w przypadku większych projektów sam ten Flex nie wystarcza i warto spojrzeć na frameworki takie jak np. PureMVC czy Caingorm. Obydwa mają za zadanie usystematyzować architekture całej aplikacji, w oparciu o model MVC. Jest oczywiście sporo frameworków dla AS3 lub strikte pod Flexa, ja używam PureMVC jakoś, że dobrze się rozwija i pozwala osiągnąć dość dobrą produktywność, kto jest innego zdania chętnie podyskutuję.



Ostatnią rzeczą wartą zauważenia jest backend, który potrzebujemy dla aplikacji napisanych w Adobe Flex. Tu z pomocą przychodzi nasz ulubiony Ruby. Ja w projektach najczęściej używam RubyOnRails z pluginem RubyAMF (wymiana danych poprzez format AMF) lub WebORB(troche wolniejszy ale ma większe wsparcie) do połączenia z frontendem z Adobe Flex. Można też użyć Javy lub JRubiego ! Jest sporo sposobów. Faktem jest, że wybrałem Rubiego, nie dlatego, że lubie CSS, nie lubie CSSów dlatego tworze interfejsy Flashowe w Adobe Flex, a całą logikę w Rubym/Railsach, piękne (FlexOnRails) ! Niektóre obrazki pochodzą z publikacji Petera Armstronga - stworzył tez publikacje na temat integracji tych technologii co warto zobaczyć www.flexiblerails.com .


Komentarze


  • Facebook
  • Twitter
  • Digg
  • Delicious
  • Google Buzz