node

Agenda

Jak wszyscy, to wszyscy...

SOPA
SOPA

Żądamy faktów!

Smoleńsk

Fakty

Microsoft is sorry about IE6

Koniec faktów

Czym (nie) jest Node.JS?

jQuery, PHP, Ruby, RoR

~~(Python + Twisted
||
Ruby + EventMachine)

Node.JS

Yes!
Yes!
Yes!

Ryan Dahl też ma brodę!
Tu też!

Event Loop

Stryczek
Kolejka
EE = require('events').EventEmitter;
ee = new EE();
die = false;

ee.on('die', function () {
    die = true;
});

setTimeout(function () {
    ee.emit('die');
}, 100);

while (!die) {}

console.log('done');
EE = require('events').EventEmitter;
ee = new EE();
die = false;

ee.on('die', function () {
    die = true;
});

setTimeout(function () {
    ee.emit('die');
}, 100);

while (!die) {} // headshot!

console.log('done');

Event-driven
non-blocking I/O

I/O – why do we care?

cost of I/O

Dostęp synchroniczny

Kasjer

Dostęp asynchroniczny

McDonald
// synchronicznie:
var res = db.query('SELECT * FROM STH');
if (res) {
    console.log(res);
}
else {
    console.log('Aaaaa!');
}

// asynchronicznie:
db.query('SELECT * FROM STH', function (err, res) {
    if (err) {
        return console.log('Aaaaa!');
    }
    console.log(res);
});

Thread pool?

Dla tych co nie znają

nginx vs apache - memory

Przykłady event-driven architecture

Dlaczego Node.JS?

Libraries like eventmachine will never be truly intuitive to use, because event-driven I/O is enough of a fundamental shift that it requires deep language integration. Javascript, it turns out, is a fundamentally event-driven language because of its origins in the browser.

Chcemy kooood!

Kod

Pobudka

Pobudka

NPM – Node Package Manager

Zastosowania

Success stories

Wydajność

Turtle

Pros

Cons

?