8. března 2011

Co vybrat na klienta? Html, flash, silverlight nebo JavaFX?

Dneska se chci zamyslet nad výběrem vhodné technologie pro prezentační vrstvu pro náš nový projekt. Bude to spíše "manažerský" pohled než programátorský - nejde mi nyní moc o to, jak dobře se to bude programovat, ale spíše o to, jak moc to bude vyhovovat požadavkům projektu a firmy, kde nyní pracuji. Navíc ty technologie ani moc neznám.

Přehled požadavků, které je potřeba splnit:

  • projekt pro rozsáhlou státní organizaci. Cílové stanice nejsou pod kontrolou, nicméně je možné definovat nějaké podmínky pro běh aplikace (např. minimální verze určitých prohlížečů).
  • minimální nároky na administraci
  • potřeba přehrávání videa i audia
  • možnost ukládání dat na klientovi resp. držení nějakého stavu na klientovi. Možná bude potřeba i částečný běh v režimu offline.
  • interakce se souborovým systémem


Dle mého názoru připadají v úvahu tyto technologie: Adobe Flash (Flex), Microsoft Silverlight a nebo JavaFX, možná OpenLaszlo.

Uvedené technologie dále ještě více proberu a budou mě zajímat hlavně odpovědi na tyto otázky:
  • Jak moc daná technologie splňuje základní požadavky projektu?
  • Jak bude těžké ve firmě v dané technologii vyvíjet? Tedy jak moc je těžké někoho sehnat, jak moc je těžké se danou věc naučit, jak moc to zapadá do znalostí, které firma nyní má apod.? Ve firmě je velké know-how s vývojem Java serverových aplikací s tlustými klienty (Delphi, trochu .Net), částečně i s tenkými webovými klienty.
  • Jak vypadá celý "ekosystém" kolem dané technologie? Komunita, dokumentace, informace na internetu atd.
  • Jaké jsou možnosti zobrazení GUI v přenosných zařízeních?


OpenLaszlo jsem objevil teprve nedávno, na to se budu muset ještě více podívat, ale moc této variantě šancí nedávám.

JavaFX:
  • nemůžu si nějak pomoci, ale Java na klientské straně moc mojí důvěru nemá. Kolem JavaFX bylo hodně humbuku 1-2 roky zpátky, teď mám pocit, že se o tom už skoro vůbec nemluví (pohled na Google Trends mi to jen potvrzuje).
  • instalace a správa klientů bude asi v pohodě, pokud je aplikace podepsaná, tak může pracovat i se souborovým systémem. Možná prvotní instalace JRE bude vyžadovat admin přístup.


Adobe Flash:
  • velice rozšířené, multiplatformí, běží snad úplně všude
  • minimální požadavky na administraci resp. zásah adminů - flash plugin se instaluje zcela sám bez problémů
  • není moc velký výběr komerčních komponent pro aplikace (třeba Ribbon)
  • přijde mi dost těžké sehnat kvalitní lidi na Flash, navíc jsou skoro nulové znalosti ve firmě o této technologii
  • z pohledu státní správy mi Flash od Adobe přijde "méně bijící do očí" než Silverlight od Microsoftu.
  • stejně jako Silverlight by měl Flash splňovat všechny vstupní požadavky


Silverlight:
  • mnoho komerčních komponent (Ribbon)
  • prvotřídní podpora multimédií včetně 3D (zrychlené přehrávání videa s korekcí zvuku tak, aby bylo rozumět).
  • píše se v C#, hodně podobné Javě. Navíc směr, kam by firma chtěla do budoucna jít, protože stávající Delphi klienti již mají nejlepší léta za sebou.
  • pro první instalaci jsou potřeba administrátorská oprávnění
  • mám pocit, že Microsoft tuto technologii celkem tlačí a podporuje, i se o ní hodně píše a je prostě vidět. Očekávám, že má nejlepší léta před sebou.
  • pro mě zatím favorit, jen si nejsem jistý, jak moc dobře to bude běhat na Linuxech. Sice existuje projekt Silverlight MoonLight, ale Linuxové distribuce ho moc rádi nemají a pak je v implementaci cca rok pozadu oproti standardní windows verzi.


A co klasické HTML? Pokud bych výběr dělal za pár let, tak věřím, že bych volil HTML5, ale teď to bohužel k tomu není. Možná pokud se ukáže, že není potřeba držet žádný stav na klientovi nebo režim offline, tak se k variantě HTML vrátím. Samozřejmě čím "tenčí" klient, tím lepší.

Jaké máte zkušenosti vy? Jaké jiné výhody či nevýhody vás napadají pro dané technologie, co by jste mi doporučili? Předem moc děkuji.

19 komentářů:

martiner řekl(a)...

Předpokládám, že spíš než Flash (animace) myslíte Flex (aplikace), takže si dovolím se podělit se svojí cca roční zkušeností s vývojem ve Adobe Flexu.

1) aplikace se ve Flexu píšou opravdu pěkně, komponenty se rozvrnou pomocí MXML, logika se dopíše v ActionScriptu (něco mezi Javou a JavaScriptem = není těžké se na ActionScript přecvičit), pěkný na událostech založený model.

2) IDE - Adobe plugin do Eclipse je dost hrůza, funguje jenom na Windows, schopnosti jsou naprosto minimální (umí vygenerovat getter/setter pro jednu proměnnou, nějaké refaktoringy nejsou), cenu 600 dolarů s bídou ospravedlňuje vizuální návrhář. Intellij Idea je na tom zásadně líp (pro ActionScript umí snad všechny refaktoringy co pro Javu), i míň stojí, ale zase nemá návrháře. Je i pro Linux, ale na Linuxu mi zase trošku blbne debugging (padá spojení mezi Ideou a Flash pluginem, na Windows to ale funguje ok).

3) aplikace běží v sandboxu Flash playeru. Kvalitu Flash playeru asi všichni známe, po pár (desítkách) reloadu aplikace player vytuhne a je potřeba ho restartovat. V sandboxu je hromada omezení, aplikace např. nemá plnou kontrolu nad kontextovým menu po kliknutí pravým tlačítkem...

4) ve Flexu se dají vyrobit standalone aplikace, které využívají Air Runtime (nutno zvlášť nainstalovat) a nemají omezení sandboxu. Nevím nic o tom, že by ne-Air aplikace mohla běžet nějak částečně offline.

5) komunita a kvalitní free komponenty: obojího jě řádově míň jak v Javě.

Ne že by Flex byl nějak špatný, naše požadavky splňuje, ale osobně bych si ho asi nevybral - dost se mi líbí, co Google předvádí s HTML(5) např v Gmailu (offline mód, integrace s desktopem,...) a myslím, že to je směr, kam půjde vývoj.

Anonymní řekl(a)...

Nemam moc zkusenosti ale flash je podle me slepa vetev (apple ho nema rad a google uz taky zacina prudit) - ale mozna je to jen ma domnenka.

Osobne bych se klonil k HTML a GWT (myslim si ze web aplikace s hloupym web klientem je budoucnost).

Michal řekl(a)...

Pokud můžeš definovat minimální verzi prohlížeče, postavil bych to na poslední verzi Chrome + HTML5. Tam by se mohlo narazit jen na to, že tam není tolik volnosti při práci se souborovým systémem (ale možná by to šlo pošéfovat přes extenze, to nvm).

Jinak Silverlight se Microsoft rozhodně nechystá zabít, protože je to hlavní vývojová platforma pro Windows Phone 7.

Jarda Jirava řekl(a)...

Ahoj,
zkusím se podělit o své, upozorňuji předem subjektivní, vnímání na dané rozhodování. Moje preference a rozhodování by bylo mezi Flash/Flex a Silverlight a vesměs bych viděl i stejné plusy a zápory. Co by ještě mimo zmíněného bylo pro mě rozhodující, a teď už je to i částečně o vývoji, zda existují frameworky a jak udělané pro prezentační vzory.
Další neméně důležitá oblast je, jak bude vypadat serverová část, jaké bude mít veřejné rozhraní a jak snadno jej bude moci klient konzumovat, případně jak těžké bude upravit toto rozhraní pro případného dalšího klienta.
Co se týká Silverlightu konkrétně, který bych se z daného popisu dobře hodil. Zdroje jsou a to jak lidské tak i k učení a myslím, že těch zdrojů je dostatek a lidi z teamu okolo Silverlightu se snaží komunikovat. Vývoj SL nespí a to co by mělo přijít v SL5 je velice zajímavé a pro vývoj v něm hodně užitečné. Obecné doporučení je začínat projekty v SL a až v případě, že na dané operace SL nestačí, tak si vypomoci desktopovým WPF.
Linux resp. Moonlight je v současné chvíli portován na podporu SL3 a je implementována částečně podpora SL4 s tím, že pro LOB aplikaci by snad mělo být použitelné téměř vše z verze 4.
Out of browser mode je vyřešen a stejně tak i přístup k filesystemu a k tomu si můžeš přidat i podporu pro volání COM komponent, pokud je třeba - vhodné třeba při exportech do Excelu a nebo pro ovládání lokálních zařízení.
Co může být poměrně kritické je, že bude vhodné zařadit do teamu pozici designera, který dokáže pracovat s danými nástroji. Na druhou stranu, to rozdělení odpovědností SL umožńuje.
Držím palce při správném rozhodování.
--J.

Pavel řekl(a)...

Nezavrhoval bych čistou Javu s tím, že frontend bude kompilován do HTML/Javascript.

http://www.eclipse.org/rap/
http://www.creamtec.com/products/ajaxswing/

Výhodu proti všem zmíněným vidím především v množství lidí, kteří danou technologii ovládají a nemusí se příliš přeškolovat.

Funkčnost žádného navrhovaného řešení nemám prakticky odzkoušenou. Ale podle popisu na webu mi to připadá hodně zajímavé: např. možnost určit, která komponenta bude vykonávána na klientovi a která na serveru.

Shodou okolností jsem tento týden zahlédl zmínku o nějakém podobném konvertoru Flashe do HTML5 od Adobe.

Anonymní řekl(a)...

Podla mna HTML5 ma velku buducnost. Pokial mate moznost urcit na ktory prehliadacoch to zalozit, tak by som asi najviac uvazoval nad touto alternativou.

Moj pohlad na vami vymenovane technologie je tento:

-JavaFX v podstate mrtvy projekt. Sun ani Oracle to nedokazali marketingovo presadit a preto to za nejaky cas skonci
-silverlight podla mna nikdy nebude mat uplnu implementaciu pod vsetkymi OS. Sice sa na to budu hrat a v konecnom dosledku, pokial vsetky stanice nebudu 100% windows, tak budete mat problemy. Ja osobne by som z dovodu kompatibility do neho nesiel. Tiez sa moze stat, ze ho Microsoft jednoducho prestane podporovat lebo pride s niecim lepsim.
-Flash je pekna technologia, funkcna prakticky na 99.9% systemoch a to uz teraz. Naucit sa ho podla mna nieje ziadny problem a tiez sa oplati pri vacsich zakazach investovat do kvalitnejsich IDE. Flash bude v kratkej buducnosti hlavny konkurent pre HTML5 a podla mna sa Adobe pokusi o vylepsenie jeho reputacie.

Suma sumarum ak vam z nejakeho dovodu nepostacuju technologie existujuceho HTML+javascript a potrebujete viac moznosti tak by som asi volil flash.
Pokial vsak mate viac casu do nasadenia a moznost povedat si, ake browsery budu klienti pouzivat tak jednoznacne HTM5.

Horyna řekl(a)...

Ahoj,

všichni mluví o HTML5, ale osobně myslím, že na jeho použití si ještě tak 3-4roky počkáme.

Připadá v úvahu tedy Flash/Flex, Silverlight.

Osobně znám Flex - dost už o něm bylo řečeno. V CZ moc lidí Flex neumí, ale lepší se to :) CZ weby a fóra, stejně tak i český Adobe, spíš řeší různé multimediální feature, než tvorbu vážných aplikací. Nejlépe se mi osvědčilo fórum Springu, jež má rozjeto několik integračních projektů s Flex - Java.

Anonymní řekl(a)...

Ahoj,
ja by sa este pozrel na cestu google gears. Ako prezentacnu vrstvu asi GWT. Problem moze byt s tym audio-videom, a skor asi s audiom. Na to neviem ziadnu odpoved.

S pozdravom Tomas Studva

Anonymní řekl(a)...

Pre velke firemene riesenie jednoznacne WEB. Akekolvek ine riesenie sa zviaze s Win platformou ktrej buducnost je otazna vzhladom k vyvoju v oblasti tabletov.
Ci je to HTML5 alebo ine HTML netreba riesit. Dnes existuju miliony kniznic ktore ta od HTML a jednotlivych browserov slusne odfiltruju.
Ako jazyk na servri jednoznacne Java koli multiplatformovosti. Klasicke page oriented JSP, JSF kde pouzivas komponenty.
Ak chces nieco zaujimavejsie skus GWT pripadne nadstavbove frameworky ako je SmartGWT alebo Ext.

antaran řekl(a)...

Keby som ako java programator dostal za ulohu prepisat hrubeho klienta na web, tak by som urcite isiel cestou najmensieho odporu t.j. GWT.

Iba ak by tie stranky museli byt vizualne atraktivne, tak by som zvolil FLEX.

Nad Silwerlight-om by som ani neuvazoval, lebo ho nepoznam. :)

Anonymní řekl(a)...

Já sobně bych uvažoval takto:

1) HTML 5 v tuto chvíli není jasný de jure ani de facto standard. Kdykoli se cokoli může změnit, a to i když definujete user agenta, tedy browser. Na HTML 5 bych to nestavěl.

2) Silverlight – s prominutím, na technologiích Microsoftu (až jsem heavy Windows user) také ne. Microsoft nedokáže udržet standard do budoucna. Podle mých zkušeností typický přístup Microsoftu je: a) za několik let bude technologii X nahrazovat jinou Y technologií, b) každou verzi X bude mírně někompatibilně měnit chování klidně do míry, která bude vyžadovat přepsání či úpravu aplikace. Velmi nedoporučuji.

3) Flash a spol. Postoj Apple i Google je irelevantní. Apple rychle vyměkne ohledně flashe, protože není v postavení kdy si může delší dobu diktovat. Google zase nemá do flashe co kecat, pokud jde o Vaší webovou stránku. Nevím o jediném způsobu, kdy by Google mohl nějak bránit flashi.

Daleko více bych se zaměřil na politiku firmy Adobe. Flash není bezproblémová a bezchybná technologie a Adobe se na ní podepisuje „ležérností v přístupu“ asi tak jak je vlastní grafickým bohémům. U nasazení Flashe a spol. bych spíše řešil spolehlivost, bezchybnost flashe, pokud vyhoví, je to možná volba.

4) HTML – čistému HTML já osobně bych dal přednost. HTML 4. Klidně s JavaScriptem, CSS, AJAXem. Dle mého je to jediné bezproblémové a tahle cesta se v budoucnu více, než vyplatí. Byť s hlediska klienta to není až takový komfort.

Miloslav Ponkrác

Lukáš Rampa řekl(a)...

Petře, nepřemýšlel jsi kromě zmíněných možností taky o Eclipse RCP?

Zdá se mi že vzhledem k požadavkům na integraci s OS klienta by to docela zapadalo. Vůbec to nemusí být "tlustý" klient z hlediska bus. logiky, může se to postavit jako hloupé zobrazovadlo dat.

Ve spojení s Java WebStart je to celkem přijatelné řešení - nedávno jsme tuhle kombinaci v praxi použ
ili.

Když tak se ozvi, podělím se o zkušenosti.

Anonymní řekl(a)...

Osvedcila se mi kombinace GWT a framework GWT-platform.

Petr Jůza řekl(a)...

Všem moc děkuji za vaše komentáře, ve kterých se objevilo spoustu zajímavých podnětů a zkušeností.

Až se rozhodneme, tak o tom napíšu další článek.

Anonymní řekl(a)...

Měl bych dotaz na Lukaše Rampu. Také uvažujeme o využití Eclipse RCP jako zobrazovadlo dat. Jakym zpusobem komunikujete se serverem? SOAP, REST, SQL, Hessian, RMI, ...?
Dekuji za odpoved.

Anonymní řekl(a)...

Len pre informaciu, napr. taky google uz ukoncil vyvoj technologie Gears a zacina sa sustredovat na vyuzivanie HTML5, takze prve lastovicky napisane s vyuzitim HTML5 mozme cakat uz tento rok a to aj napriek tomu, ze HTML5 standard este nieje plne dokonceny.

Markus řekl(a)...

Flex dodnes není multivláknový. Nevadí mi ani tolik fakt, že nedokáže využít potenciál moderních multijádrových CPU - dokonce už i na mobilnách zařízeních. Vadí mi chybějící podpora v ActionScriptu pro práci s vlákny, což bude jednou znamenat aplikace přepsat a nové psát jinak. SilverLight už má tohle za sebou. Na co více vláken? Třeba na dotahování informací na pozadí, asynchronní validace, kanály událostí a další vymoženosti moderních distribuovaných systémů. Jiné možnosti? GWT pro generování html/javascriptu je určitě možnost. Další je Vaadin.

Anonymní řekl(a)...

Ja pridam jeste jeden dotaz:
Potreboval bych libovolnou technologii kterou bych mohl prochazet (po uzivatelskem souhlasu a interakci) adresarovou strukturu. Rozhodujici je to, aby to fungovalo pokud mozno bez instalace - tj treba pro Flash hovori to, ze je nainstalovany na 99% pocitacu (ale nevim, jestli to umi).
Muze to byt cokoliv, HTML5, Flash, Flex, Air, Silverlight, Java ...

Lukáš Rampa řekl(a)...

@Anonymní: v našem případě používáme SOAP, ale vcelku na tom nezáleží, použijte co vám nejvíce vyhovuje...