Je všeobecně známo, že moderní webové aplikace se používají den ode dne častěji. Vývoj je opravdu rychlý a umožňuje publikovat aplikace na všech platformách, kde jediným požadavkem je mít prostředí, které zvládá daný technologický stack. Jazyk, který lze v rámci tohoto prostředí označit za krále všech ostatních, je JavaScript. Dnes se s vámi podělím o některá fakta o vývoji softwaru, která s tímto jazykem souvisejí.
Definice rychlého vývoje aplikací
Slovní spojení "rychlý vývoj" lze vykládat mnoha špatnými způsoby. Abychom se tomu vyhnuli, vysvětleme si, jaká jsou naše očekávání. No, hlavní důležitou věcí je rozpočet. Abychom mohli vytvořit mnoho verzí stejné aplikace, potřebujeme mnoho vývojářů z několika technologických balíčků a každého z nich zaplatit. Abychom mohli vytvářet nativní mobilní aplikace, musíme duplikovat naše kód dobře fungovat na obou platformách - Android i iOS. Běžným přístupem je udržovat obě aplikace podobné, používat stejné API, zachovávat stejné chování atd. V důsledku toho musíme duplikovat kód pro vytvoření dvou verzí téže aplikace. JS je jazyk, který umožňuje nás vytvářet mobilní a webové aplikace současně. Zní to nemožně? Vysvětlím vám, o čem mluvím.
Mobilní telefon? Web? To je mi jedno.
Řekněme, že chceme vytvořit aplikaci, která používá funkci React knihovna. Tuto knihovnu lze použít pro vytváření webových aplikací a mobilních aplikací s nativním rozhraním React. Logické mechanismy aplikace, jako je autorizace, výpočet, filtrování dat atd. Háčky React. Jde o to, že tyto háčky mohou sdílet obě verze aplikace - webová i mobilní. Díky této možnosti máme k dispozici následující úspory:
- Není třeba duplikovat kód zodpovědný za stejnou věc,
- Pro implementaci stejné části aplikací není třeba najímat nativní mobilní vývojáře,
- Pro implementaci stejné aplikace na různých mobilních platformách (Android/iOS) není nutné míchat různé jazyky,
- Jeden vývojář může být zodpovědný za implementaci konkrétních funkcí aplikace na všech platformách.
Abychom shrnuli tento odstavec - nejde o to, že jedna kódová základna bude pohánět všechny verze aplikace, ačkoli můžeme sdílený kód rozdělit a použít v každé z nich, aby se proces vývoje opravdu rychleji.
Závěr - pokud chcete vytvářet webovou a mobilní aplikaci současně, zvažte knihovnu React, která dokáže sdílet kódovou základnu v mobilní i webové verzi aplikace.
Ale co backend?
Když se před několika lety mluvilo o backendu, asi jen málokdo si dokázal představit, že by jeho údržba mohla být možná s pomocí jazyka, jako je např. JS. Vývoj tohoto jazyka je úžasný a jeho plody můžeme sklízet dodnes.
O čem to mluvím? Pokud si najmete správného Vývojáři JS, se ukazuje, že mohou psát nejen frontend aplikace, ale také backend - tedy být zodpovědní za zpracování dat na serveru, komunikaci s databází, různé typy integrací atd. Stále váháte nebo nejste o tomto jazyce přesvědčeni? K takovému postoji není důvod! Backend pomocí JS lze implementovat dvěma oblíbenými způsoby - v rozšiřitelném a konfigurovatelném režimu, který nám může poskytnout express.js, a ve strukturovaném režimu pomocí vzoru DI - nest.js.
Obě řešení jsou velmi populární a pohánějí mnoho produkčních aplikací, jejichž majitelé jsou "technologickými giganty" ve svém oboru. Myslím, že již dostatečně vyzrála na to, aby vás přesvědčila k výběru jednoho z nich.
Stále to nestačí? Podobně jako u sdílení kódu mezi webovými a mobilními aplikacemi může backend sdílet prostředky jak s první, tak s druhou aplikací. Klíčové slovo, které je zde třeba použít, je TypeScript - mimo jiné nám umožňuje sdílet kódovou základnu, tj. společnou definici datových typů pro všechny platformy.
S aplikacemi postavenými výhradně na JavaScript / TypeScript stack pomocí monolitu, máme ušetřeno mnoho řádků kódu, které bychom museli duplikovat v nativních programovacích jazycích. Na druhou stranu použitím stejného jazyka na všech frontách můžeme sdílet obrovské množství logiky mezi všemi aplikacemi, což by rozhodně urychlilo dobu, za kterou lze konkrétní aplikaci vytvořit. Nezní to skvěle?
Může JS pohánět desktopové aplikace?
Ukazuje se, že technologie pro vytváření aplikací v prohlížeči jsou skvělé pro údržbu těch aplikací, které používáme v jejich desktopové podobě - dobrým příkladem může být Slack. Slack je aplikace používaná pro tým komunikace - kromě standardního zasílání zpráv nabízí mnoho různých funkcí a různé typy externích integrací. To vše z něj dělá jednu z nejoblíbenějších aplikací používaných především v oblasti IT průmysl.
Ukázalo se, že Slack používá webové technologie (a tedy i JavaScript) také k vytvoření svého aplikačního rozhraní. Základem, který umožňuje spouštět takové aplikace na ploše, je elektron. Vytváření grafických rozhraní pomocí webových technologií umožňuje mnohem jednodušší, rychlejší a obecně možný vývoj aplikací pro různé platformy najednou.
Je JS dostatečně vyspělý?
Podle frontendové části aplikace si nelze dělat iluze o tom, že by JS je jediným a výhradním jazykem, který zde pohání ekosystém. Prozatím neexistují žádné životaschopné alternativy, které by mohly tuto část aplikace nahradit (i když si myslím, že WebAssembly nás může v budoucnu překvapit). Když už tedy mluvíme o vyspělosti JS na frontendu - není pochyb o tom, že je jediným královským.
Když mluvíme o backendu, mnoho vývojářů může být šokováno nebo okamžitě popřít, že JS je vhodný jako programovací jazyk pro backend. Tuto záležitost je však třeba analyzovat objektivně.
Spousta poskytovatelů cloudu poskytuje SDK, které umožňují přímo používat cloud metody. Kupodivu jedna z nejoblíbenějších záložek, hned vedle C#, Go and Java, je Node.js. Ukazuje se, že tato platforma je ideální pro škálování a vytváření aplikací založených na mikroslužby nebo architekturu bez serveru. Závěr - JS je jedním z nejoblíbenějších jazyků pro vývoj aplikací založených na mikroslužbách/bezserverové architektuře. Na obrazovkách níže vidíme, že svatá trojice (Google Computing Services, AWS, Azure) poskytovatelů cloudových služeb nám umožňuje vytvářet aplikace pomocí uzel.js.


Co se týče ekosystému node.js, asi každý zná knihovnu express.js - jedná se o jednoduchý a přímočarý nástroj, který umožňuje definovat cesty a následně jim předávat příslušná data, která byla na straně JS řádně zpracována. Navíc vzor používaný mezi HTTP požadavky zpracovávanými v express.js se stal jedním z nejoblíbenějších v celém ekosystému a je jakýmsi vzorem pro různé další knihovny využívající např. architekturu serverless.
Závěr - JS je dostatečně vyspělý jazyk na to, abyste do něj mohli vložit všechny karty a vytvořit frontend i backend. Navíc se jedná o poměrně čerstvý jazyk, který si snadno najde cestu do moderních aplikačních architektur. Je skvělé, že programátor, který umí jeden jazyk, zvládne obě strany (full stack) aplikace.
Je JS dostatečně rychlý?
Nejčastěji používaným enginem pro spouštění kódu JS je v8, poháněný jazykem C++. Tento engine vyvinutý společností Google je určen pro spouštění aplikací pro webové platformy. Zajímavé je, že tento engine neinterpretuje kód JS. Místo toho provádí věc zvanou "JIT" - "just in time compilation". Díky tomu nemusíme kód JS interpretovat řádek po řádku, pouze jej zkompilujeme a spustíme. Je to ještě rychlejší a dává nám to opravdu pěkné výkonnostní výsledky.
Je JS dostatečně spravedlivý, pokud jde o výkon? Ano, je. Pokud jsou algoritmy dostatečně spravedlivé, není problém použít JS na straně serveru. Další věcí je udržovat kód co nejvíce asynchronní. S těmito postupy váš kód zvládne paralelní požadavky bez problémů. Kvůli výkonu se nemusíte starat o výměnu technologií - zejména pokud je architektura aplikace škálovatelná.
V tomto článku jsem se již podrobně zabýval výkonem a srovnávacími testy.
Není JS takovou zvláštností mezi ostatními jazyky?
To jsou desítky názorů, že jazyk JS se v některých případech chová divně a jeho ovládání je něco, z čeho vám při vývoji praskne hlava. S tím nemohu souhlasit 🙂 Stejně jako každý jiný jazyk má několik vzorů/chování, které nejsou elegantní, ale s pochopením toho, jak fungují a jaké jsou jejich cíle, není vývoj aplikací s JS nepříjemný.
Zejména poznámka "asynchronní" těsně před JS vyvolává u některých vývojářů mrazení v zádech. Je těžké ji pochopit, když s ní nemáte žádné zkušenosti. Je to však součást JS, která nám umožňuje snadno vytvářet moderní řešení. Podívejme se nad websockety: protože jsou založeny na událostech - každá ze spojených jednotek - uživatel a server - může paralelně vysílat a přijímat události. Pokud je kód, který tuto aplikaci pohání, dostatečně asynchronní a neblokuje hlavní vlákno, můžeme snadno zpracovat tisíce požadavků v krátkém čase.
Porovnejme JS a PHP s kontextem webových zásuvek. PHP je synchronní programovací jazyk, takže řešení témat websocketů způsobuje velké bolesti hlavy. Vidíme, že PHP získává vzory z JS pro vytváření interaktivních backendových aplikací, které mohou využívat moderní technologie, jako je webrtc nebo websockets.
Vše smíchejte dohromady
Když shrneme všechny odstavce, můžeme uvést několik skutečností:
JavaScript je jazyk, který lze použít k vytváření nejrůznějších aplikací - od webových přes mobilní až po desktopové;
Aplikace napsané v JS mohou mezi sebou sdílet různé fragmenty kódu, například ty, které jsou zodpovědné za formátování dat nebo typy v Typescriptu;
Díky rozvoji webu je výkon, který JS nabízí, dostatečně dobrý na to, abyste se rozhodli pro vývoj frontendových i backendových aplikací;
Díky své neobvyklé konstrukci je JavaScript schopen podporovat moderní aplikační infrastruktury, jako jsou websockety a WebRTC;
Najmete-li vhodně kvalifikovaného vývojáře, můžete využít jeho potenciál na všech dostupných frontendech, které tento jazyk pohání;
JS je jazyk, který již několik let stoupá v žebříčcích oblíbenosti, a nic nenasvědčuje tomu, že by se to mělo změnit.
Abych vyjádřil svůj názor, který je sice neobjektivní - využití možnosti opakovaného použití stejného kódu na všech dostupných frontách v JavaScript je něco, co jistě urychlí vývoj aplikací a sníží počet vývojářů, kteří se podílejí na údržbě backendu aplikací napsaných v jiných technologiích. Jako potvrzení si připomeňme skutečnost, že obrovské množství takzvaných IT gigantů se tímto vzorem řídí a sdílí poměrně velkou část kódové základny napříč platformami. Navzdory různým názorům na tento jazyk je třeba vzít v úvahu skutečnost, že statistiky používání a spokojenosti s používáním jazyka JS rok od roku roste a jeho vývojáři se mohou snadno napojit na trend full stack.

Přečtěte si více:
Proč byste (pravděpodobně) měli používat Typescript
Jak nezničit projekt špatnými kódovacími postupy?
Strategie načítání dat v NextJS