Dobré a špatné stránky vývoje webových aplikací v Node.js

author
21 minutes, 23 seconds Read
OBSAH

Doba čtení: 13 minut

Jako nejoblíbenější programovací jazyk je JavaScript také jednou z nejuniverzálnějších technologií pro vývoj softwaru. Tradičně se používá jako nástroj pro vývoj webových frontendů, ale stal se také významným nástrojem pro multiplatformní vývoj mobilních aplikací jako základní technologie pro velké množství platforem, například Apache Cordova/PhoneGap, React Native, NativeScript, Appcelerator Titanium.

Tím však oblasti využití JavaScriptu nekončí. V poslední době se hodně mluví o využití jazyka JavaScript pro programování na straně serveru. Jedním z nástrojů, které tento posun ve vývoji webových aplikací naznačily, byl Node.js.

Co je to Node.js?

Node.js vlastně není framework ani knihovna, ale běhové prostředí založené na JavaScriptovém enginu Chrome V8.

Tuto technologii poprvé představil již v roce 2009 Ryan Dahl na každoroční evropské konferenci JSConf a okamžitě byla uznána jako „nejzajímavější jednotlivý kus softwaru v současném JavaScriptovém vesmíru“.

Jako open-source projekt byl Node.js sponzorován společností Joyent, poskytovatelem cloudových výpočetních a hostingových řešení. Společnost investovala do řady dalších technologií, například do frameworku Ruby on Rails, a poskytovala hostingové služby společnostem Twitter a LinkedIn. Druhá jmenovaná společnost se také stala jednou z prvních společností, která použila Node.js pro backend svých mobilních aplikací. Tuto technologii později převzala řada technologických lídrů, jako jsou například společnosti Uber, eBay, Walmart a Netflix.

Široké rozšíření serverového JavaScriptu s Node.js však začalo až v nedávné době. Zájem o tuto technologii dosáhl vrcholu v roce 2017, jak vyplývá z trendů Google Trends, a zůstává vysoký.

Stažení Node.js. Dlouhodobou podporu a nejnovější verze Node.js pro Windows a MacOS si můžete nainstalovat zde. Také připomínáme – npm je distribuováno s Node.js out-of-the-box.

Dokumentace. Dokumentaci a průvodce pro začátek najdete na tomto odkazu.

Node.js IDE . Téměř každý populární editor kódu má podporu a zásuvné moduly pro JavaScript a Node.js, takže záleží jen na tom, jak si IDE přizpůsobíte svým potřebám při kódování. Mnoho vývojářů si však velmi pochvaluje speciální nástroje VS Code, Brackets, Atom a WebStorm.

Rámce. Používání middlewaru nad čistým Node.js je běžnou praxí, která vývojářům usnadňuje život. Srovnání populárních frameworků Node.js věnujeme samostatný článek, kde se podíváme na Express.js, Meteor, Sales.js, Koa.js, Keystone.js a Loopback.js.

Další nástroje ekosystému JavaScriptu používané s Node.js najdete ve specializovaném článku.

Silné a slabé stránky Node.js jsou předmětem vášnivých diskusí. Abychom uvedli věci na pravou míru, analyzovali jsme obojí – klady i zápory Node.js – a pokusili se zjistit, jakým projektům může tato volba technologie prospět. Proč tedy používat Node.js?

Rychlé vysvětlení, co je to Node.js (pokud chcete další videoobsah, přihlaste se k odběru)

Výhody Node.js

⊕ Robustní technologický stack

JavaScript prokázal, že je nesporným lídrem mezi nejoblíbenějšími programovými jazyky. Node.js se zase stal samostatným jménem v oboru. S celkovým počtem 368 985 988 stažení a více než 750 novými přispěvateli, jak uvádí zpráva Node-by-numbers 2018, se zdá být projekt silnější než kdykoli předtím.

Používání Node.js pro backend automaticky získáte všechny výhody full stack vývoje v jazyce JavaScript, jako např:

  • lepší efektivita a celková produktivita vývojářů
  • sdílení a opakované použití kódu
  • rychlost a výkon
  • snadné sdílení znalostí v týmu
  • obrovské množství bezplatných nástrojů

V důsledku toho je váš tým mnohem flexibilnější, vývoj je méně časově náročný a ve výsledku získáte rychlý a spolehlivý software. Vývojáři vyškolení ve frontendovém JavaScriptu mohou začít programovat stranu serveru s minimálním úsilím. Díky stejnému jazyku na obou stranách můžete kód opakovaně používat na frontendové i backendové straně tím, že jej zabalíte do modulů a vytvoříte nové úrovně abstrakce.

Vzdory obecnému přesvědčení nejste jako full stack vývojáři nijak omezeni na tradiční MEAN (MongoDB, Express.js, AngularJS a Node.js) stack. Jediné, co v tomto případě musíte mít, je Node.js (pro backendové programování v JavaScriptu neexistuje alternativa). Ostatní technologie v rámci tohoto zásobníku jsou volitelné a lze je nahradit některými jinými nástroji poskytujícími podobnou funkčnost (o alternativách si přečtěte v našem samostatném článku).

⊕ Rychlé zpracování a model založený na událostech

Node.js je rychlý; to není mýtus. Podívejte se na výkonnostní testy serveru toptal.com, které porovnávají, jak GO, PHP, Java a Node.js zvládají souběžné požadavky. Existuje několik důvodů, proč Node.js vykazuje takové výsledky:

V8 engine. Engine použitý v implementaci Node.js byl původně vyvinut pro prohlížeč Chrome. V8 v prohlížeči Chrome je napsán v jazyce C++ a slouží ke kompilaci funkcí napsaných v jazyce JavaScript do strojového kódu, což zvládá úctyhodnou rychlostí. Stačí se podívat na výkonnostní benchmarky na blogu V8. Díky tomu, že Google do svého enginu hodně investuje, vykazuje V8 každý rok výkonnostní zlepšení a Node.js z něj vytahuje celý pytel výhod.

Neblokující vstup/výstup a asynchronní zpracování požadavků umožnily Node.js zpracovávat požadavky bez jakýchkoli prodlev. V kontextu backendu synchronní zpracování předpokládá, že kód je prováděn postupně. Každý požadavek tedy blokuje vlákno a nutí ostatní požadavky čekat na jeho dokončení. Asynchronní zpracování umožňuje zpracovávat požadavky bez blokování (neblokující I/O) vlákna. Po zpracování požadavku tedy může vyslat zpětné volání a pokračovat v obsluze požadavků. To pomáhá systému Node.js maximálně využít jedno vlákno, což vede ke krátké době odezvy a souběžnému zpracování.

Dalším aspektem je model založený na událostech. Při použití společného jazyka pro obě strany, klienta i serveru, dochází k rychlé synchronizaci, což je užitečné zejména u aplikací založených na událostech a pracujících v reálném čase. Díky své asynchronní, neblokující, jednovláknové povaze je Node.js oblíbenou volbou pro online hry, chaty, videokonference nebo jakákoli řešení, která vyžadují neustále aktualizovaná data.

Příklady mluví samy za sebe: mnoho předních společností přešlo na vyvinuté technologie Node.js a zaznamenaly výrazné zlepšení – například společnost PayPal zaznamenala po přechodu z Javy 35procentní snížení doby odezvy.

⊕ Škálovatelná technologie pro mikroslužby

Jelikož se jedná o lehký technologický nástroj, je použití Node.js pro architekturu mikroslužeb skvělou volbou. Tento architektonický styl nejlépe popsali Martin Fowler a James Lewis jako „přístup k vývoji jedné aplikace jako sady malých služeb, z nichž každá běží ve vlastním procesu a komunikuje pomocí odlehčených mechanismů, často rozhraní API zdrojů HTTP.“

Rozdělením aplikační logiky do menších modulů, mikroslužeb, namísto vytvoření jednoho velkého monolitického jádra umožníte lepší flexibilitu a položíte základy pro další růst. V důsledku toho je mnohem snazší přidávat další mikroslužby nad ty stávající než integrovat další funkce do základní funkčnosti aplikace.

Monolitická architektura vs. architektura mikroslužeb v kostce

Podle zprávy Node.js User Survey Report 2017 je technologií volby při vytváření a nasazování řešení ekosystému mikroslužeb Node.js. Přibližně polovina respondentů používá při vytváření webových aplikací Node.js technologie související s mikroslužbami (konkrétně Docker, přední platformu pro kontejnerizaci softwaru):

Podíl vývojářů používajících kontejnerizaci Docker s Node.js

Nejnovější zjištění ukazují, že technologie související s mikroslužbami, jako jsou Docker a Kubernetes, zaznamenaly v roce 2018 nárůst používání, protože tento architektonický styl se stává jen populárnějším. Díky tomu, že každá mikroslužba komunikuje s databází přímo prostřednictvím streamů, umožňuje taková architektura vyšší výkon a rychlost aplikace. Shodu na nebesích podporují dva frameworky hojně využívané pro architekturu mikroslužeb. Framework Express uvádí mezi svými uživateli společnosti IBM a Uber, zatímco restify používá npm a Netflix.

Příkladem živé implementace je přechod společnosti Walmart na architekturu mikroslužeb s Node.js vedl k následujícím okamžitým přínosům:

  • Více než 20procentní nárůst konverzí obecně a 98procentní nárůst mobilních konverzí
  • Setprocentní provozuschopnost na Černý pátek (zpracování více než 500 milionů zobrazení stránek)
  • Úspora až 40 procent na hardwaru a 20-50 procent na celkovém provozu

Dalším zářným příkladem toho, jak může Node.js překonat konkurenci z hlediska výkonu, je případ společnosti GoDaddy. Při spuštění reklamní kampaně SuperBowl byla společnost schopna zpracovat 10 000 požadavků za sekundu bez výpadků, přičemž díky Node.js využívala pouze 10 procent hardwaru.

⊕ Bohatý ekosystém

Jedno slovo – npm, výchozí správce balíčků Node.js, slouží také jako tržiště pro open source nástroje JavaScriptu, což hraje důležitou roli v rozvoji této technologie. V registru npm je k dnešnímu dni k dispozici přibližně 836 000 knihoven a každý týden je zveřejněno více než 10 000 nových, ekosystém Node.js je tedy poměrně bohatý. Stejné statistiky poukazují na to, že 97 procent moderních webových aplikací se skládá z modulů npm. A to je důkazem jeho nesporné popularity mezi vývojáři.

Díky tak obrovskému množství bezplatných nástrojů, které jsou dostupné na několik kliknutí, existuje obrovský potenciál pro využití Node.js. Zároveň se open source software těší rostoucí oblibě, protože umožňuje vytvářet nová řešení, čímž se snižují celkové náklady na vývoj a doba uvedení na trh.

⊕ Silná firemní podpora

Jak bylo uvedeno výše, vývoj Node.js podpořila společnost Joyent. V roce 2015 byla vytvořena nadace Node.js Foundation, která má „umožnit široké přijetí a pomoci urychlit vývoj Node.js“. Zakládajícími členy organizace se staly společnosti IBM, Microsoft, PayPal, Fidelity a SAP.

Seznam organizací, které používají Node.js ve výrobě, se neustále rozšiřuje. V současné době zahrnuje téměř tři stovky známých společností, například PayPal, Medium, Trello, Uber a Zendesk.

Velmi málo open source projektů se kdy těšilo tak silné podpoře předních světových společností. A to předznamenává, že Node.js má výjimečný potenciál.

⊕ Bezproblémová podpora JSON

Ačkoli jiné backendové technologie jako PHP a Ruby on Rails mohou pro komunikaci používat formát JSON, Node.js to zvládá bez převodu mezi binárními modely a používá JavaScript. To se hodí zejména tehdy, když potřebujete vytvořit rozhraní RESTful API pro podporu databází NoSQL, jako je MongoDB – písmeno M v zásobníku MEAN. Tato bezproblémová komunikace s jedním z hlavních standardů pro přenos dat je další výhodou ekosystému JavaScript.

Nevýhody Node.js

Θ Úzká místa výkonu při náročných výpočetních úlohách

Největší nevýhodou Node.js je i v současnosti jeho neschopnost zpracovávat úlohy vázané na procesor. Abychom však pochopili, jaké jsou kořeny tohoto problému, potřebujeme trochu kontextu. Začněme od základů, od samotného JavaScriptu.

Jak víme, Node.js je běhové prostředí, které vykonává JavaScript na straně serveru. Jelikož se jedná o frontendový programovací jazyk, používá JavaScript k rychlému zpracování úloh jedno vlákno. Vlákna nejsou pro jeho fungování nutná, protože úlohy v JavaScriptu jsou lehké a zabírají málo místa na procesoru.

Vrátíme-li se zpět k Node.js, víme nyní, proč je považován za jednovláknový: Zpracovává JavaScript, který je jednovláknový. Neblokovaný model vstupu/výstupu znamená, že Node.js odpoví na volání klienta ke spuštění požadavku a zpracuje úlohu během doby, kdy vystřelí zpětné volání, protože úloha je připravena. Při asynchronním zpracování úloh provádí Node JS kód ve svém jediném vlákně na základě událostí. Tomu se říká smyčka událostí.

Problém nastane, když Node.js obdrží úlohu vázanou na procesor: Kdykoli by do smyčky událostí přišel náročný požadavek, Node.js by nejprve nastavil veškerý dostupný procesor na jeho zpracování a teprve poté by odpovídal na ostatní požadavky zařazené do fronty. To má za následek pomalé zpracování a celkové zpoždění smyčky událostí, a proto se Node.js nedoporučuje pro náročné výpočty.

V roce 2018 však bylo v Node.js zavedeno vícevláknové zpracování jako experimentální funkce s aktualizací 10.5.0. V roce 2018 se v Node.js objevily nové funkce. Novou funkci nazvanou modul pracovních vláken lze použít k využití dalších vláken z fondu vláken, aby bylo možné provádět úlohy vázané na procesor. To však lze provést pouze na strojích s více jádry, protože Node.js stále umožňuje používat jedno jádro pro jedno vlákno. To znamená, že těžké paralelní procesy lze provádět na jiném vlákně. Tato funkce zůstává ve verzi 12 Node.js experimentální, ale byla výrazně vylepšena.

Θ Callback hell issue

Vzhledem ke své asynchronní povaze se Node.js hodně spoléhá na zpětná volání, tedy funkce, které se spouštějí po dokončení každé úlohy ve frontě. Udržování řady úloh ve frontě na pozadí, z nichž každá má své zpětné volání, může mít za následek tzv. callback hell, což má přímý dopad na kvalitu kódu. Zjednodušeně řečeno jde o „situaci, kdy jsou zpětná volání vnořena do dalších zpětných volání o několik úrovní hlouběji, což potenciálně ztěžuje pochopení a údržbu kódu.“

Příklad kódu s vnořenými zpětnými voláními

Zdroj obrázku: callbackhell.com

Také je to často považováno za známku špatných standardů kódování a nedostatku zkušeností s JavaScriptem a zejména s Node.js. Kód, který je znázorněn výše, lze refaktorovat a zjednodušit, a to v několika málo krocích, jak ukazuje obrázek callbackhell.com.

Θ Nezralost nástrojů

Ačkoli jsou základní moduly Node.js poměrně stabilní a lze je považovat za zralé, v registru npm je mnoho nástrojů, které jsou buď nekvalitní, nebo nejsou řádně zdokumentovány/testovány. Navíc samotný registr není dostatečně dobře strukturovaný, aby nabízel nástroje na základě jejich hodnocení nebo kvality. Proto může být obtížné najít nejlepší řešení pro vaše účely, aniž byste věděli, co hledat.

Skutečnost, že Node.js ekosystém je většinou open source, má také svůj dopad. Zatímco na kvalitu jádra technologie Node.js dohlíží společnost Joyent a další významní přispěvatelé, zbytek nástrojů může postrádat kvalitu a vysoké standardy kódování stanovené globálními organizacemi.

Θ Rostoucí poptávka po zkušených odbornících

Vzdory obecnému přesvědčení nejsou všichni vývojáři JavaScriptu také vývojáři Node.js. Zvládnutí programování v jazyce JavaScript na straně serveru vyžaduje značné úsilí a určité zázemí v oblasti backendového vývoje. Kvůli takto strmé křivce učení je počet inženýrů Node.js výrazně nižší než celkový počet odborníků na JS.

S rostoucím humbukem kolem Node.js se zvyšuje poptávka po zkušených odbornících v této oblasti.

Existuje velká mezera ve znalostech mezi studenty technických oborů, kteří nastupují do zaměstnání, a potřebami zaměstnavatelů
Zdroj: HackerRank

Při milionech vývojářů JavaScriptu může být těžké najít pro svůj projekt kvalifikovaného odborníka na Node.js. V takovém případě určitě nechcete omezovat své hledání pouze na jednu zemi. Získávání technických talentů v zahraničí se v IT průmyslu již dávno stalo normou.

Jak se naučit Node.js

Tady je váš startovací balíček pro pochopení a práci s Node.js.

Turoriály. Neomezujte se jen na oficiální dokumenty: Podívejte se na spoustu bezplatných lekcí na W3Schools, navštivte mezinárodní workshopy od Nodeschool a samozřejmě využijte knihovnu bezplatných tutoriálů od freeCodeCamp.

Třídy. Pokud se věnujete studiu, založte si online kurz o Node.js: Zde je jeden na PluralSight a samozřejmě jeden na Udemy.

Interaktivní výuka. Podívejte se na bezplatné i placené zdroje, které vám umožní učit se Node.js pomocí interaktivních lekcí a cvičení. Jedním z nejoblíbenějších je The Art of Node.

Komunita. Podívejte se na oficiální seznam komunitních projektů Node.js. Rychlý tip: Prozkoumejte skupiny a komunity na Facebooku ve vaší oblasti/prvním jazyce. A samozřejmě se podívejte na komunity Node.js na Redditu, tag na StackOverflow a téma na Quora.

Node.js vs Ruby on Rails vs Django vs Symfony

Není mnoho technologií, které by mohly konkurovat popularitě Node.js nebo poptávce na trhu. Pokud se však podíváme na alternativy pro programování na straně serveru, uvidíme na nebi minimálně tři další zářící hvězdy. Jsou to Ruby on Rails, Django a Symfony. Podívejme se, zda se vyrovnají výhodám Node.js a zda sdílejí jeho nevýhody.

Srovnání statistik Node.js, Rails, Django a Symfony

Zdroj: StackShare

Ruby on Rails je známé svým jednoduchým, ale názorově vyhraněným jazykem a dostupností gemů – vlastního ekosystému vlastních balíčků Rails. Samotný jazyk Ruby je intuitivní a přívětivý pro začátečníky a má podpůrnou a oddanou komunitu, která přispívá kódem RubyGems. Jazyk Rails byl vytvořen pro rychlý vývoj a tvorbu prototypů, ačkoli jej úspěšně používají takové značky jako GitHub, Twitter a Airbnb, což dokazuje jeho širokou škálu využití. Obzvláště působivá je jeho funkce pro migraci dat – na rozdíl od Node.js, který používá další balíčky, Rails již obsahuje funkci umožňující snadnou a důslednou manipulaci s databází.

Kdy byste měli použít Rails místo Node.js? Rails nemůže konkurovat výkonu a škálovatelnosti Node, nicméně Rails může být lepší volbou pro rychlý vývoj. Node.js sice musí k dosažení takové rychlosti vývoje používat moduly třetích stran, ale Ruby má vše netradičně. Co se týče jazyka, žádný nástroj nemá výraznou výhodu – zatímco Node.js má vysokou poptávku, ale nízkou nabídku, talentů v Ruby je zpočátku méně.

Django je webový framework na Pythonu, který je podle údajů na StackOverflow nejrychleji rostoucím programovacím jazykem. Prodává se jako nástroj pro perfekcionisty s termíny a je vytvořen s cílem vytvářet aplikace co nejrychleji a co nejstrukturovaněji, nejbezpečněji a nejsnáze pochopitelně. Django je spolu s Pythonem také považován za jazyk s mírnější křivkou učení. Zatímco práce s Node.js bude vyžadovat rozsáhlé znalosti JavaScriptu, Django je technologie „na baterky“. Má vestavěný panel správce pro snadnou aktualizaci a údržbu databází a šablon, což urychluje vaši práci.

Kdy byste měli použít Django místo Node.js? Ve srovnání s Node.js je Django nástroj vhodný pro začátečníky. Kromě samotného jazyka neexistuje žádný skutečný důvod, proč si vybrat jeden z nich na úkor druhého. Je to spíše otázka vašeho pohodlí a zkušeností s JavaScriptem nebo Pythonem než konkrétních případů použití.

Symfony je framework PHP, což mu automaticky poskytuje více než 20 let dokumentace a masivní aktivní komunitu. Více než 80 % webu je poháněno jazykem PHP, přičemž na WordPressu běží projekty jako Facebook, Baidu nebo jiné webové stránky. Symfony je sice jen jedním z frameworků PHP na trhu, ale je působivě stabilní, škálovatelný a dobře funguje pro rozsáhlé projekty. Používá také šablonovací engine Twig, který funguje podobně jako mnoho systémů pro správu obsahu založených na PHP.

Kdy byste měli použít Symfony místo Node.js? Symfony přirozeně podporuje funkce CMS, jako jsou šablony a panely správce, což mu umožňuje provozovat blogy, zpravodajské weby a e-shopy. Některé z příkladů zahrnují Yahoo Answers, Dailymotion a National Geographic.

Nechte Node.js zazářit

Je zřejmé, že se všemi uvedenými výhodami a nevýhodami Node.js není tato technologie stříbrnou kulkou. Ale není jí ani Java, .Net framework nebo PHP. Přesto existují specifické případy, kdy každá z uvedených technologií funguje nejlépe. V případě Node.js se jedná o aplikace v reálném čase s intenzivními vstupy a výstupy, které vyžadují rychlost a škálovatelnost.

Mohou to být sociální sítě, herní aplikace, živé chaty nebo fóra a také burzovní software nebo reklamní servery, kde je rychlost vším. Díky rychlosti a škálovatelnosti je Node.js technologií volby pro zařízení a aplikace internetu věcí náročné na data a pracující v reálném čase.

Node.js udělal z JavaScriptu plnohodnotnou technologii volby pro vývoj webových aplikací. Díky své neblokující architektuře funguje Node.js dobře při kódování a vysílání videa a zvuku, nahrávání více souborů a streamování dat. Ten může být mimořádně užitečný pro software v cestovním ruchu, kde je třeba získávat data z různých rozhraní API různých dodavatelů.

V poslední době se Node.js aktivně používá v softwaru podnikové úrovně. I když se o tom stále vedou spory, mnoho velkých společností a globálních organizací, například Capital One a NASA, již Node.js přijalo. A podnikový ekosystém Node.js nadále dozrává díky nástrojům, jako jsou IBM API Connect, Triton od společnosti Joyent, N|Solid od společnosti NodeSource, Red Hat OpenShift, Trace od společnosti RisingStack a další.

Tento příspěvek je součástí našeho seriálu „Dobré a špatné“. Další informace o výhodách a nevýhodách nejoblíbenějších technologií najdete v dalších článcích z této série:

Dobré a špatné z vývoje mobilních aplikací Xamarin

Dobré a špatné z vývoje plného zásobníku v JavaScriptu

Dobré a špatné z ReactJS a React Native

Dobré a špatné z programovacího jazyka Swift

Dobré a špatné z .NET Framework

Dobré a špatné z vývoje v jazyce Angular

Dobré a špatné z nástroje Selenium pro automatizaci testování

Dobré a špatné z vývoje aplikací pro Android

Similar Posts

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.