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

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.
Seriál: Node.js - s JavaScriptem na serveru (13 dílů)
- JavaScript na serveru: Začínáme s Node.js 23. 11. 2010
- JavaScript na serveru: Patří budoucnost Node.js? 21. 9. 2012
- JavaScript na serveru: Architektura a první Hello World 5. 10. 2012
- JavaScript na serveru: moduly a npm 12. 10. 2012
- JavaScript na serveru: začínáme programovat e-shop 19. 10. 2012
- JavaScript na serveru: MongoDB, Mongoose a AngularJS 26. 10. 2012
- JavaScript na serveru: Testování a kontinuální integrace 2. 11. 2012
- JavaScript na serveru: REST API 9. 11. 2012
- JavaScript na serveru: implementace REST API 16. 11. 2012
- JavaScript na serveru: nástroje a dokumentace 23. 11. 2012
- Začínáme s AngularJS 30. 11. 2012
- AngularJS direktivy a testování 7. 12. 2012
- JavaScript na serveru: CoffeeScript a šablonovací systémy 14. 12. 2012
Nálepky:
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:
- 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.
- Node package manager (npm) není potřeba pro Windows instalovat zvlášť, nainstaluje se současně s Node.js.
- 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ů:
- Aplikace s RESTful/JSON API
- Single-page aplikace (např. ve spolupráci s vynikajícím frameworkem AngularJS)
- 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í.
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 :-)
Děkuji. Seriál už mám rozepsán, několik dílů je již připraveno.
A mimochodem, o Zend Frameworku jsem také před více než 5 roky seriál psal:-) http://web.archive.org/web/20100422224815/http://php.interval.cz/zend-framework/
Na tenhle seriál se opravdu těším. Díky za něj!
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.
Naštěstí můžete používat CoffeeScript, ve kterém bude vyvíjená i aplikace v rámci tohoto seriálu.
FYI: JavaScript se stejně jako Ruby objevil v roce 1995
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
Naopak JavaScript je velmi špatně navržený jazyk.
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.
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.
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“.
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.
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 ;-)
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/
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.
Já JS miluji. Už se těším na naše další články.
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.
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í
Děkuji za komentář.
Před zveřejněním prvního dílu jsem napsal na weblog článek o tom, co od seriálu očekávat: http://weblog.ronnieweb.net/2012/09/serial-o-node-js-na-zdrojaku/.
Přemýšlel jsem dlouho, jakým způsobem ten seriál psát. V angličtině existuje velké množství tutoriálu o Node.js, nicméně nikde jsem neviděl sérii článků, která by dokázala zdůraznit ty pravé výhody Node.js, jak je vidím já. Pro mě je Node.js platforma, která umožňuje vyvíjet úplně nový druh webu, který výrazně těží z propojení klientského i serverového JavaScriptu, což se projeví třeba mnohem lepším UI nebo možností velmi jednoduše psát real-time aplikacemi (viz odkazovaný článek na blogu).
To je také důvod, proč kromě Node.js budou okrajově zmíněny i další technologie. Aplikace bude třeba vyvíjena na Githubu a hned v úvodním díle, ve kterém začnu vyvíjet aplikaci (4.), také čtenáře rychle provedu vytvořením účtu v cloud hostingu a způsobem, jak v něm aplikaci rovnou spustit. Pokud článek bude číst někdo, kdo do té doby prováděl deployment jen přes FTP, tak uvidí ten drastický rozdíl, jak snadno se změny v Node.js aplikacích dostávají na server, vč. třeba automatické instalace npm modul ap. Zároveň si bude moci repo na githubu forknout a udělat si zde vlastní změny a ihned je pak odeslat do cloudu. Nebo vidět aplikaci v jednotlivých fázích rovnou v provozu. Podle mě tím výrazně stoupne užitek celého seriálu.
A jednou z technologií v tomto případě bude i CoffeeScript, protože je velmi často vývojáři v Node.js používán. Navíc zde na Zdrojáku již seriál o CS proběhl, takže v češtině ty materiály jsou. Nicméně chápu, že se někomu CoffeeScript nelíbí a nerad bych tyto čtenáře od Node.js odradil, takže původně jsem plánoval, že u každé ukázky bude i odkaz na gist.github.com, aby viděl i verzi v čistém JavaScriptu. Nicméně zvažuji i použití podobného způsobu prezentace kódu, jako je třeba v této knize: http://arcturo.github.com/library/coffeescript/04_idioms.html, kdy si čtenář může rovnou v článku zobrazit ukázky v jazyce, o který má zájem.
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
> 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.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!
„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.
Č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.
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:
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.
Ein Volk, ein Welt, ein Sprache?
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-)
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.
Představení rychlosti node.js uvedením srovnání s Ruby mě pobavilo. Proti Ruby je každý jazyk rychlý.