Přejít k navigační liště

Zdroják » JavaScript » JavaScript na serveru: Patří budoucnost Node.js?

JavaScript na serveru: Patří budoucnost Node.js?

Články JavaScript, Různé

LinkedIn, eBay, Yahoo!, Mozilla či Walmart a mnoho dalších staví své aplikace na Node.js. Proč si vybrali právě mladou platformu Node.js, k čemu se Node.js hodí a odpovědi na další otázky jsou náplní úvodního článku ze seriálu o Node.js.

Pokud jste se náhodou dosud nesetkali s Node.js, přečtěte si úvodní článek od Jakuba Nešetřila, kde se dozvíte základní informace o architektuře Node.js. Článek však vyšel před 2 roky a od té doby se mnohé změnilo:

  1. Od konce roku 2011 je k dispozici verze pro Windows s klasickým instalátorem, není tedy potřeba používat Cygwin, jedním kliknutím nainstalujete vše, co potřebujete.
  2. Node package manager (npm) není potřeba pro Windows instalovat zvlášť, nainstaluje se současně s Node.js.
  3. Jakub popisoval nestabilní verzi 0.2, dnes je k dispozici verze 0.8.9 a v blízké budoucnosti můžeme očekávat vydání první verze.

Proč by vás mohl Node.js zaujmout?

Především umožňuje používat JavaScript na serveru. Díky tomu získal velmi rychle značnou popularitu, protože s klientským skriptováním se setkal každý tvůrce webových aplikací, a tak je zde početná základna potenciálních programátorů, kteří mohou s Node.js začít bez toho, aby trávili hodiny studiem nového jazyka.

S předchozím bodem souvisí i fakt, že značná část knihoven používaných pro klientský JavaScript je díky Node.js možné používat i na serveru. Hledáte něco na práci s datem? Použijte knihovnu Moment.js všude, u klienta i na serveru.

JavaScript je dnes všude. Používáme ho pro komunikaci s NoSQL databází, pro ukládání dat využíváme formát JSON (= JavaScript object notation), v JavaScriptu můžeme psát mobilní aplikace pro všechny současné mobilní platformy a aplikace v JavaScriptu je možné psát i pro Windows 8. Díky Node.js je možné tedy používat jeden jazyk, jeden styl, jedny knihovny kódu všude.

Další významný faktor rostoucí popularity Node.js je komunita. V roce 2011 bylo k dispozici 1800 modulů, které řešily vše důležité, co tvůrce aplikace potřeboval. O rok později je jich k dispozici už 15 tisíc! Jedním příkazem můžete jakýkoliv z nich nainstalovat a ihned používat. Řešili jste někdy přihlašování přes  Facebook, Twitter či Google ve své aplikaci? V Node.js máte k dispozici knihovny Passport či Everyauth a přihlašování s nimi zprovozníte během několika minut.

Na webu npmjs.org můžete procházet moduly podle jejich oblíbenosti uživateli.

Všechny moduly jsou dostupné na npmjs.org, můžete si prohlédnout ty, které jsou nejpoužívanější a nejoblíbenější. Téměř všechny jsou dostupné na Githubu. Mimochodem, Node.js je na Githubu po Twitter Bootstrapu druhý nejsledovanější projekt.

Významná je také podpora velkých firem. Vývoj je sponzorován firmou Joyent. Yahoo! svůj framework Mojito staví na HTML5, CSS3 a Node.js. Dále v článku najdete odkaz na zkušenosti od LinkedIn, který na Node.js staví svou mobilní verzi. Node.js je k dispozici u Windows Azure, pro své své projekty ho používá i eBay. Mnoho dalších projektů je možné nalézt na wiki projektu na Githubu.

Pro jaké typy projektů se Node.js hodí a pro jaké nikoliv?

Felix Geisendörfer sepsal základní případy užití, kde Node.js najde své uplatnění a také případy, kde byste měli použít jinou technologii. Node.js je velmi vhodné použít, pokud chcete vytvářet tyto typy projektů:

  1. Aplikace s RESTful/JSON API
  2. Single-page aplikace (např. ve spolupráci s vynikajícím frameworkem AngularJS)
  3. Real-time aplikace (Socket.io, frameworky Derby.js či Meteor)

Naopak se Node.js nehodí pro projekty, které jsou velmi náročné na CPU. Jako příklad Felix uvádí software pro kódování videa.

Kdo Node.js používá? Jaké jsou zkušenosti s Node.js v produkci?

Za všechny vyberu jeden příklad, a to mobilní verzi od LinkedIn. Dříve byla jejich mobilní aplikace napsána v Ruby on Rails, po přechodu na Node.js se značně snížil počet serverů, který bylo pro hostování potřeba:

Zlepšení výkonu po přechodu k Node.js bylo ohromující. Dříve jsme používali 15 serverů s 15 virtuálními servery na každém fyzickém stroji. Po přechodu k Node.js jsou potřeba pouze čtyři virtuální servery, které zvládnou dvojnásobný provoz.

Co dále?

Během několika následujících týdnů se můžete na Zdrojáku těšit na seriál, který vás provede tím nejdůležitějším, co potřebujete k tomu, abyste mohli začít psát aplikace v Node.js. Po úvodních dílech věnujících se základům začneme programovat aplikaci, na které si ukážeme typické využití Node.js. Půjde o javascriptovou single-page aplikaci s REST architekturou s využitím populárního klientského MVC frameworku AngularJS. Na této aplikaci si také ukážeme celé workflow práce s Node.js včetně jednotkového testování a deploymentu na server.

V dalším díle seriálu se dozvíte o něco málo o architektuře Node.js a o asynchronním programování.

Komentáře

Subscribe
Upozornit na
guest
29 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Eda

Díky za článek, jen tak dál.

Místo dalšího článku o starém, hrozném Zendu doporučuju sepsat další pokračování série o Node.js. To je zajímavé a žhavé téma :-)

Dundee5

Na tenhle seriál se opravdu těším. Díky za něj!

noJavaScript

ked vidim syntax JavaScript chce sa mi zvracat.
ako moze taky jazyk este existovat? ten jazyk dokopy nic nevie, a je velmi zastaraly.

Oproti tomu Ruby – moderny jazyk, krasna syntax, netreba deklarovat premenne – dynamicky typovany, plne OOP, blocky atd. atd.

Chvala bohu ze W3c pracuje aspon na ECMAscript 6.

K47

FYI: JavaScript se stejně jako Ruby objevil v roce 1995

balik

JavaScript to taky zly jazyk nie je a ma velmi pekne vlastnosti. Odporucam knizku
Javascript: The good parts. Potom mozno zmenite nazor.

http://shop.oreilly.com/product/9780596517748.do

Radek Miček

Naopak JavaScript je velmi špatně navržený jazyk.

balik

To v tej knihe aj pisu ako „bad parts“. Len netreba vylievat vanicku aj s dietatom a javascript odvrhovat.

Napriklad umoznuje prototypovo-orientovane programovanie, co si na nom velmi cenim. http://en.wikipedia.org/wiki/Prototype-based_programming . (Bohuzial si developeri vydupali classy, co je skoda.) Ozaj odporucam precitat si spominanu knihu.

Radek Miček

Bohužel, mnoha špatným částem JavaScriptu se prakticky nejde vyhnout, a proto si myslím, že je lepší se vyhnout JavaScriptu – například naspat kód v jiném jazyce a ten přeložit do JavaScriptu.

Riff

To je dost omezené uvažování. V každém jazyce najdu dost nelogičností, špatně navržených částí nebo krkolomných postupů na to, abych mohl prohlásit „jazyku xxx je lepší se vyhnout“.

Radek Miček

To je dost omezené uvažování.

To je racionální uvažování – vzhledem k tomu, že existuje mnoho lepších jazyků. Pokud budete psát větší program a budete mít zájem, aby fungoval, tak spíše než volnost a shovívavost jazyka oceníte schopnost jazyka vynucovat a garantovat různé vlastnosti programu.

Riff

Větší programy v JS vídám takřka pořád. Ale pokud máš prostě jasno, že je to to největší zlo, nebudu ti to vyvracet, mám teď lepší věci na práci ;-)

blizz

ja som tiez na JS nadaval az kym som v nom 2 mesiace vkuse neprogramoval a nepochopil som jeho filozofiou. JS ma uplne inu filozofiu ako mainstreamove jazyky ale inak je to pekny jazyk, nie kazdemu sadne jeho ukecana syntax ale to krasne riesi http://gkz.github.com/LiveScript/

Riff

Přesně tak. Nejvíc mě JS chytl až po delší době, když jsem se do něj opravdu dostal a pochopil všechny principy. Co jsem vypozoroval, tak nejvíc na něj nadávají lidi, kteří v něm ve skutečnosti neumí a nechápou ho. LiveScript vypadá opravdu zajímavě, díky za tip.

M3dard

Já JS miluji. Už se těším na naše další články.

chleba

Pokud by nekomu nevyhovoval v urcitem pripade node.js tak muze pouzit Tea.js http://code.google.com/p/teajs/ a mimochodem bych sem nepletl ruby kery nemuzes pouzit primo v prohlizeci kor kdyz jde o to mit jeden jazyk jak na frontend tak backend.

Pavel Lang

Prosím, nepleťte CoffeeScript s Node.js hned na začátku.

Už je proto, že většina balíčků v npm je v čistém JS, node core je také čistý JavaScript (obalující minimální C++ vrstvu) a pokud bude někdo v Node.js programovat, musí rozumnět sémantice JavaScriptu.

CoffeeScript je „hezká“ věc — to je več názoru, mě osobně se velmi špatně čte, své místo určitě má, ale zařadil bych ho buď stranou od seriálu o Node nebo až na konec, jako možnost.

To, že je kód v node samý callback a closure ani CoffeeScript nevyřeší a to, že nabízí zápis
(x) -> foo x
na místo ukecaného
function(x) { foo(x); }
je marginální. Člověk aby přemýšlel co se ve skutečnosti v kódu děje a co že mu to kafe z toho kódu udělá. Toto zrovna je jednoduchý příklad, ale není vyjímkou mít callbacky vnořené dva nebo tři a pak už je zápis složitější na pochopení.

Prototypová dědičnost je také základ JavaScriptu. Má svá pravidla a pokud je člověk nezná, pak ho ani CoffeeScript nezachrání

Širo

Ja JavaScript milujem. Je to geniálny dynamický jazyk a ten čo ním opovrhuje, asi ho nepochopil a nikdy ani nepochopí. Každý jazyk má svoje výhody a nevýhody, ale tvrdiť o niečom – čomu nerozumiem, že je to zlé a škaredé … to je proste choré. … a nemôžeme JavaScript porovnávať s niečim, na čo nebol určený.

Som veľmi rád, že sa Zdrojak začal znova venovať node.js. Na node.js mi veľmi vadí, že je holý, bosý a asynchrónny. Od vývojárov node.js by som čakal niečo ako od Microsoftu .NET Framework (viem, chcem veľmi veľa) a až potom by bolo na čase porozmýšľať, kedy s ním do produkcie… Rozbehať viacej stránok na serveri v node.js je tiež problém, treba na to niečo ako port forwarding alebo forwardovať ho cez Apache, čo sa mi zdá zbytočné. Toto sú proste jeho nedostatky (ktoré nevravím, že sa nedajú riešiť). Myšlienka node.js je pekná, ale veľmi záhadná.

Ď. za článok

Pavel Lang

> Na node.js mi veľmi vadí, že je holý, bosý a asynchrónny.

Naopak, Node se nesnaží diktovat jak má aplikace vypadat. To, že není základ plný redundancí a balastu je vlastně velká výhoda.
Node + npm umožňuje psát a používat „packages“ a to jak pure JavaScript tak i bindingy v C++, což dokáže pokrýt většinu potřeb (ne-li všechny).
To, že je v node vše asynchronní, je potíž jen na začátku, než se člověk seznámí s celým prostředím a principy. Pro velké zátěže (myšleno počet requestů) je režie s thready s klasickým blokujícím modelem příliš vysoká. Ve skutečnosti to je jeden z původních motivů vzniku node.js (C10k problem)

> Od vývojárov node.js by som čakal niečo ako od Microsoftu .NET Framework (viem, chcem veľmi veľa) a až potom by bolo na čase porozmýšľať, kedy s ním do produkcie…

Tak to od vývojářů Node nikdy mít nebudete. Microsoft diktuje co a jak se má používat, Node naopak dává jen základ a to jak jej budete používat je na Vás. Můžete si implementovat své DSL jazyky, používat CoffeScript nebo Coco nebo cokoliv co se (Vám, uživatelům Node) bude hodit. Mimochodem jsem jedním z přispěvatelů do Node, i když ne příliš dlouho, a můžu říct, že komunita je velmi ochotná a pružná.

> Rozbehať viacej stránok na serveri v node.js je tiež problém, treba na to niečo ako port forwarding alebo forwardovať ho cez Apache…

VirtualHosty lze v Node.js implementovat též (můžu rozebrat jinde bude-li zájem). Pro ostrý provoz se v zátěži stejně používá Nginx a já k tomu mám navíc i HAProxy. Ale to nemění nic na faktu, že i samotné (ač možná zbytečně krkolomné) řešení čistě s Node bude výkonnější než Apache samotné.
Node si také může omezit práva process.setuid(­...); process.setgid(­...);, to se hodí mapř. po inicializaci, kdy se načítají citlivá data (klíče, hesla…) a před spuštěním serveru se omezí práva.

Širo

Nechcem urážať a kritizovať node.js, som vďačný – že to niekto vymyslel.


Holý, bosý … človek potrebuje niečo a musí sa ihneď pozerať po moduloch. To je presne to, čo mi na node.js vadí. Je síce fajn, že mám vždy 10 možností, ale ktorá možnosť je správna? Niektoré moduly píše jeden človek (zabije sa, čo potom?) a verzie sa niekedy dosť líšia. Toto je presne to čo .NET Framework rieši.

Asynchrónne node.js: na tom je najhoršie to, že človek musí zmeniť úplne rozmýšľanie a nevidím v tom žiadnu výhodu. Disk alebo databáza je zo svojej podstaty synchrónne IO.

Spustenie node.js do prevádzky: veľmi komplikované pre bežných kóderov.


Netreba to brať ako kritiku, je to len môj pohľad. Ja som určite s node.js neprestal. Takže teším sa na ďalší diel!

vidya

„Asynchrónne node.js: … nevidím v tom žiadnu výhodu.“ to je prave ten problem, ze tvoj use case (CRUD?) nie je to s cim zacal na node pracovat ryan dahl a co s nim robia joyent, yammer a dalsi.

„Spustenie node.js do prevádzky: veľmi komplikované pre bežných kóderov.“
tak ked mas napr expressjs appku, tak ti staci na vps nainstalovat nodejs, potom cez npm forever a teoreticky to staci.

Michal Zahradníček

Článok na elegantné riešenie na VirtualHosty v node.js by som bral všetkými desiatimi. Je to totiž jediná vec, ktorá ma tak trocha odradzuje od tejto technológie.

Defiler

Moc děkuji za článek. Respektive děkuji za započetí celého seriálu. Už několik měsíců žiji v přesvědčení, že Javascript je nejperspektivnější jazyk s obrovským potenciálem.

Počítejte se mnou:

  1. Client-side Javascript
  2. Programování pro .NET s JScript
  3. Programování Metro aplikací http://mywindows.cz/item/jak-za-jeden-tyden-pripravit-kompletni-aplikaci-pro-windows-8-s-pouzitim-technologii-html5-css3-a-javascript-den-3/category/vyvoj-metro-aplikaci/group/windows-8
  4. Doplňky pro Google Chrome
  5. Server-side Javascript
  6. Využití v mobilních aplikacích (Ať už jednoduché patlání ve WebView či pomocí celých řešení, jako je Phonegap; vymakané frameworky jako http://www.sencha.com/products/touch)
  7. Spousta dalších věci, na které jsem zapomněl

Když se podívám pár let zpátky – Javascript jsem taky nenáviděl a nazýval jsem ho tou největší odporností. Ale pak jsem narazil na Node.js (v té době byl mezi top 10 buzzword-y) a slogan „one language everywhere“ a obrátil jsem o 180 stupňů. Protože přesně takový charakter tento jazyk má. Když si dáte trochu práce – můžete ho používat takřka všude.

Takže jsem přídavné jméno „hnusný“ vyměnil za „jiný“ a dívám se na celou věc trochu jinak. Jaký dává smysl fanaticky odsuzovat Javascript, když celý svět chce Javascript a celý svět momentálně žije Javascriptem?
Někomu to určitě smysl dává. Tak prosím, žijte si svou Non-javascript way, programujte si ve svých „skutečných jazycích“ a nespamujte diskuze svými znechucenými komentáři.

Inkvizitor

Ein Volk, ein Welt, ein Sprache?

Martin Hassman

To je pochopitelně nesmysl, dále bude existovat hromada jazyků, ze kterých si lidé budou vybírat. Svoboda musí být. Jenom ty jazyky budou ve skutečnosti všechny interpretované JavaScriptem. 8-)

Inkvizitor

Ta myšlenka je zajímavá a napadlo mě to před časem taky. Je ale otázka, zda ta sémantická propast mezi některými jazyky a JS nebude tak hluboká, že ty programy v jiných jazycích budou neefektivní. Viz třeba problémy některých jazyků na JVM.

starter

Představení rychlosti node.js uvedením srovnání s Ruby mě pobavilo. Proti Ruby je každý jazyk rychlý.

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.

Pocta C64

Za prvopočátek své programátorské kariéry vděčím počítači Commodore 64. Tehdy jsem genialitu návrhu nemohl docenit. Dnes dokážu lehce nahlédnout pod pokličku. Chtěl bych se o to s vámi podělit a vzdát mu hold.