3. Prečo vzniklo node.js?
• Lebo Ryan Dahl
„Windows is very important, just like php.“
Powerpoint Templates
Page 3
4. Prečo vzniklo node.js?
• I/O operácie sú drahé
L1-cache 3 cycles
L2-cache 14 cycles
RAM 250 cycles
Disk 41 000 000 cycles
Network 240 000 000 cycles
• Riešenie: fork, threads
http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
Powerpoint Templates
Page 4
5. Prečo vzniklo node.js?
• Vlákna sú pamäťovo náročné
• Ďalšie problémy: deadlock
http://blog.webfaction.com/a-little-holiday-present
Powerpoint Templates
Page 5
6. O node.js
• Serverová platforma
• Založená na Chrome JS runtime V8
• Jednovláknová
• Udalosťami riadená
• Určená pre
• Aplikácie pracujúce s veľkým
množstvom dát
• Aplikácie pracujúce v reálnom čase
Powerpoint Templates
Page 6
12. Web sockety
• Socket.io
• Knižnica poskytujúca univerzálne
API pre vytváranie aplikácií
pracujúcich v reálnom čase
• Protokoly: WebSocket, AJAX long
pooling, JSONP pooling...
• Prehliadače: IE, Safari, Google,
Firefox, Opera, ...
Powerpoint Templates
Page 12
13. Použitie node.js
• PopCorm
• Kolaboratívna platforma
• Pre riešenie úloh (vzdelávanie)
• Integruje sadu kolaboratívnych
nástrojov
• Textový editor, grafický editor,
kategorizátor, diskusia
PopCorm
Powerpoint Templates
Page 13
14. PopCorm
• CRUD časť aplikácie v RoR
• Kolaboratívne nástroje v node.js
• Ako databáza bolo použité MySQL
• Na produkcii sme použili webový
server Nginx a Monit na testovanie
dostupnosti node.js nástrojov + ich
prípadný reštart
Powerpoint Templates
Page 14
15. Prečo node.js?
• Veľké množstvo dát
• Každá zmena = nová revízia
• Potreba synchronizovať obsah v
reálnom čase
• Snaha o maximálnu efektívnosť
práce skupín
• AJAX nie je dostatočne
rýchly/efektívny
Powerpoint Templates
Page 15
16. Video ukážka
• Textový editor
• Etherpad Lite
• Kategorizátor
• Diskusia
Etherpad Lite: http://etherpad.org/
Powerpoint Templates
Page 16
17. Diskusia
var app = require('express').createServer()
var io = require('socket.io').listen(app);
var settings = require("./utils/Settings");
var messageHandler = require("MessageHandler");
app.listen(settings.port);
io.sockets.on('connection', function (socket) {
socket.on('start', function(...) {
messageHandler.handleStart(...);
});
socket.on('typing-message', function(...) {
messageHandler.handleTypingMessage(...);
});
socket.on('send-message', function(...) {
messageHandler.handleNewMessage(...);
});
...
Powerpoint Templates
Page 17
18. Prijatie novej správy
exports.handleNewMessage = function(...) {
var created_at = new Date().getTime();
socket.emit('new-message', ...);
socket.broadcast.to(socket.group_id).
emit('new-message', ...);
chatMessage.addNewChatMessage(..., logError);
if (activity_id !== null) {
userCharacteristicMatrixValue.
increaseValue(..., logError);
}
...
Powerpoint Templates
Page 18
19. Praktické skúsenosti
• Štatistika
• Virtuálny stroj: 4 jadrá, 2GB RAM
• 50 paralelne pracujúcich
používateľov
• Vyťaženie CPU: MySQL 10%,
Ruby 5%, node.js <1%
• Zistenia
• Nástroje v node.js bez problémov
zvládali synchronizovať obsah
• MySQL by bolo vhodné nahradiť za
Redis
Powerpoint Templates
Page 19
20. Praktické skúsenosti
• Identifikované problémy
• Museli sme riešiť veľa „zvláštnych“
problémov najmä so socket.io
• Pri produkčnom nasadení bol veľký
problém s umiestnením node.js
aplikácií za Nginx
• Stlačenie tlačidla ESC zrušilo vo
Firefoxe socketové spojenia so
serverom
• Niektoré problémy so socketmi sa
prejavovali len pri kombinácii 2 a
viac rôznych prehliadačov
Powerpoint Templates
Page 20
21. Pozitíva node.js
• Javascript je veľmi vhodný pre
programovanie s callbackmi
(na rozdiel od Ruby)
• Rovnaký programovací jazyk na
klientovi aj na serveri
• Všetko sa vykonáva asynchrónne
(okrem vášho kódu)
• Vysoká produktívnosť
• Minimálna réžia (CPU, pamäť)
• Modulárnosť
Powerpoint Templates
Page 21
22. Negatíva node.js
• „It's Fucking JavaScript“
if (typeof my_var !== "undefined" &&
my_var !== null) {}
• Problémy s produkčným nasadením
• Celková nevyspelosť technológie
• Priveľmi dynamický vývoj
• Nedostatočné technológie pre
testovanie
Powerpoint Templates
Page 22
23. Záver
• Kedy nepoužiť node.js
• Výpočtovo náročné aplikácie
• CRUD/HTML aplikácie
• Kedy použiť node.js
• JSON API
• AJAXom preplnené aplikácie
• Streamovanie dát
• Realtime aplikácie
Powerpoint Templates
Page 23
24. Dôležité zdroje
• http://nodejs.org/
• Oficiálna stránka node.js
• http://nodeguide.com/
• Rozsiahly tutoriál pre programovanie v node.js
• http://nodetuts.com/
• Sada 30 video-tutoriálov
• http://blog.mixu.net/2011/02/01/understanding-the-
node-js-event-loop/
• Vysvetlenie procesu spracovanie udalostí
• http://search.npmjs.org/
• https://github.com/joyent/node/wiki/modules
• Registre modulov
Powerpoint Templates
Page 24
25. Zaujímavé články
• http://www.ibm.com/developerworks/opensource/libra
ry/os-nodejs/
• Úvod do node.js
• http://simonwillison.net/2009/nov/23/node/
• Úvod do node.js
• http://radar.oreilly.com/2011/07/what-is-node.html
• Rozsiahlejší úvod spolu s dobrými príkladmi
• http://mashable.com/2011/03/10/node-js/
• Rozsiahlejší úvod spolu s dobrými príkladmi
Powerpoint Templates
Page 25
26. Zaujímavé články
• http://teddziuba.com/2011/10/node-js-is-cancer.html
• Trochu iný pohľad na node.js
• http://blog.targeterapp.com/post/22984987832/why-
we-moved-from-nodejs-to-ror
• Prípadová štúdia, kedy autori prešli od
node.js k RoR
• http://www.unlimitednovelty.com/2012/03/why-critics-
of-rails-have-it-all-wrong.html
• RoR vs. node.js
Powerpoint Templates
Page 26