Blog | Proč nepsat client-side aplikace?

Proč nepsat client-side aplikace?

Každý najdeme spoustu důvodů, proč psát client-side aplikace. Z aktuálního vývoje může mít člověk skoro pocit, že není jiný způsob programování, než mít server jen jako hloupé uložiště připojené přest REST. Málokdo se zmiňuje i o nevýhodách client-side programování. Já neříkám, ať nepíšete vůbec žádné client-side aplikace. Jsou situace, kdy je to rozhodně lepší a vhodnější. Podívejme se ale na situaci, kdy browser až tak skvělé místo pro vývoj není.

Sám jsem napsal svou první client-side aplikaci někdy na přelomu 2008–2009 (šlo o konfigurátor Racků pro Conteg, který už dnes neběží a jehož novou verzi najdete tady (už ne ode mě)).

Další velké věci, které jsem v client-side programoval jsou:

  • Tripomatic – věřím, že Tripomatic je jeden z největších mashupů nad Google Maps, jaký kdy byl v ČR napsán.
  • Editor Workflow pro České Radiokomunikace – nástroj, v kterém je možné modelovat workflow, tento nástroj pohání veškerou správu workflow ve firmě.

Podílel jsem se na řadě dalších single-page aplikacích, v Angularu atd.

Teď co jsem se naučil o SPA negativního?

  • JavaScript je naprd
  • prohlížeče jsou naprd
  • testování je naprd
  • uložiště jsou naprd
  • přístup k počítači je naprd

JavaScript je naprd

Mám pocit, že JS vyhovuje nejlépe těm, kteří přešli z PHP nebo Ruby světa. Je dynamický, ohybatelný, inspirovaný funkcionálním i objektovým programováním. Umožňuje monkey patching, který ale naštěstí používá málokdo. Umožňuje definovat si své objekty, což bohužel umí taky málokdo.

Má několik skvělých transpilerů, každý z nich ale trpí tím, že je překládán do JavaScriptu.

  • CoffeeScript – dává třídy a odstraňuje spoustu zbytečné syntaxe, přidává některou syntaxi z Ruby a Pythonu
  • LiveScript – vše, co CoffeeScript a ještě lepší funkcionální programování, přidává syntaxi z Haskellu a F#
  • TypeScript – přidává typy, zjednodušuje práci s objekty, přidává syntaxi podobnou některým staticky typovaným C-like jazykům

Dávají sice hezčí syntax, ale některé problémy řešit neumí

V žádném z těchto jazyků (stejně jako v JS) nemůžete použít rekurzi na velké množství prvků kolekce (nemáte tail-call optimalizaci).

Taky si nenapíšete své metody do datových struktur objektově, abyste u toho nedělali monkey patching. Svůj string bez implementace všech jeho metod si nenaprogramujete a ikdyž to uděláte, nebude podporován knihovnami (stejný problém má PHP a ArrayObject nebo objekty implementující Iterator).

Taky v client-side JS nenajdete namespaces. Dají se snadno emulovat, ale stejně je práce s nimi méně příjemná, než v jiných jazycích .

Prohlížeče jsou naprd

Další věc, která mi vadí, jsou prohlížeče.

Každý je jiný. A když spadne, je možné dobře ladit v Chrome, ale už ne tak dobře v IE. Ani ladící konzole v Safari se mi nepoužívá dobře.

Prohlížeče nerady drží velká množství dat. Představte si, že si do paměti načtete binárně obrázky a upravujete je. Líbí se vám taková představa? Já bych se ji docela bál.

Zajedna JS bude „rozparsovaný“ obrázek držet pravděpodobně v datové struktuře, která bude několikanásobně větší, než je nutné.

Za druhé na něco takového nebudu mít knihovny.

Za třetí nemůžu obrázky zpracovat na více vláknech a rozhraní to bude v mnoha případech brzdit (narozdíl třeba od Gimpu, kde je možné filtry pouštět na pozadí).

JavaScript nemá vůbec zajímavý způsob, jak programovat vícevláknově (workers za zajímavé řešení fakt nepovažuju).

Testování je naprd

Většina lidí nepíše v JS testy vůbec. Což je zajímavý rozdíl oproti server-side jazykům. V PHP taky hodně lidí/firem nemá testy. To ale neplatí o jiných rozšířených server-side jazycích. Když se podíváte na běžné projekty v C#, Javě, Ruby, Clojure atd., testy tam obvykle najdete.

Další problém, když už začnete psát testy, je zapojení integračního serveru. Jen málokdo používá něco, jako Karma. Jenže jak jinak chcete zjistit, jestli testy procházejí, když musítě někde kliknout, něco si zobrazit? Ve srovnání se všemi možnými testovacími frameworky na server-side, je zapojení do Jenkinsu obvykle otázka konfigurace 1 pluginu.

Uložiště jsou naprd

Ve světě uložišť je server-side naprostým rájem. Ať už začneme u známých a rozšířených db, typu MSSQL, MySQL, Postgres, NoSQL uložišti jako je Mongo, Riak, nebo memory storages, jako je memcached nebo Redis, nebo se podíváme na škálovatelná monstra (v dobrém) typu HBase nebo Cassandra.

Když se podíváme, jaká uložiště máme k dispozici v prohlížeči, bude nám smutno. Velmi smutno. Key-value localStorage lze jen ztěží považovat za solidní nástroj. Ve skutečnosti je vhodný akorát na uložení výsledků, které někde vygenerovalo uložiště na … ano, serveru.

Přístup k počítači je naprd

Budu-li chtít uploadnuté obrázky resiznout, přejmenovat, zazipovat, digitálně podepsat a odeslat e-mailem, bude to na serveru docela jednoduchý úkol.

Když budu totéž chtít udělat na klientovi, tak si vylámu zuby.

A to není jen tato situace. Když budu chtít importovat nějaký 10 GB soubor, tak zase půjdu na server.

A tak bych mohl pokračovat.

Zkrátka když člověk dělá víc, než jednoduchou hru, nebo pár pospojovaných formulářů a datagridů, tak pro něj bude server přirozenější. A pokud se dnešní doba vyznačuje tím, že píšeme stále větší a složitější aplikace, znamená to, že budeme potřebovat víc client-side nebo server-side?

Závěrem

Ano, 1 % vývojářů může udělat ze serveru hloupé uložiště. Ano, 90 % vývojářů by prospělo, kdyby uměli lépe client-side. Ale zároveň ano, 90 % vývojářům prospěje víc, když se zdokonalí v server-side než v client-side.

I přes takovýhle článek mě dnešní ohromná podpora vývoje v prohlížeči těší. JS dospěje, nástroje se zdokonalí, frameworky a knihovny vzniknou. A možná za 10 let bude příklad se zipováním a digitálním podepisováním souborů už mimo.

Jenže do té doby bude těžiště aplikací, „které něco dělají“ na serveru. A není to špatně.

Programování

Předejte zkušenosti i dalším a sdílejte tento článek!



Jiří Knesl
Business & IT konzultant

Jiří Knesl poprvé začal programovat v roce 1993. Od té doby, díky skvělým učitelům a později zákazníkům, měl možnost neustále růst v oboru vývoje webových aplikací a informačních systémů. v roce 2002 se přidal zájem o ekonomii a v roce 2006 o organizaci práce. Vším tím se konstantně profesně zabývá jak ve svém podnikání, tak i u zákazníků. Za posledních 5 let vydal na tato témata přes 400 článků.

Prohlédněte si moje reference

Mám zkušenosti z rozsáhlých projektů pro korporace, velké podniky, střední i malé firmy, ale i pro startupy v cloudu. Zvyšoval jsem jejich know-how, pomáhal nastavovat jejich organizační strukturu, byl lektorem a mentorem v náročných situacích. Podívejte se, jak vidí můj přínos samotní klienti.

Sledujte mé postřehy na sociálních sítích