Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JavaScript Streams

Lupo Montero
December 10, 2012

JavaScript Streams

Presentación para reunión de JavaScript Perú 10 Dic 2012

Lupo Montero

December 10, 2012
Tweet

More Decks by Lupo Montero

Other Decks in Programming

Transcript

  1. nginx vs apache Event loop vs Threads Peticiones/seg y conexiones

    simultáneas http://blog.webfaction.com/2008/12/a-little-holiday-present-10000-reqssec-with-nginx-2/ Monday, 10 December 12
  2. nginx vs apache Event loop vs Threads Memoria y conexiones

    simultáneas http://blog.webfaction.com/2008/12/a-little-holiday-present-10000-reqssec-with-nginx-2/ Monday, 10 December 12
  3. Por qué JavaScript • Porque es el lenguage del browser

    (single thread event loop) • Porque resulta no ser lo que creíamos que era • Porque tiene muy buenas partes (funciones, closures, lexical scoping, ...) • Porque se adapta con naturalidad a un paradigma asíncrono basado en eventos Monday, 10 December 12
  4. node.js in brief The first presentation on Node.js from Ryan

    Dahl at JSConf 2009 http://www.youtube.com/watch?v=ztspvPYybIY • Server-side JavaScript • Built on Google’s V8 • Evented, non-blocking, I/O. Similar to EventMachine or Twisted • CommonJS modules system • 8000 lines of C/C++, 2000 lines of JavaScript, 14 contributors Monday, 10 December 12
  5. Funciones en JavaScript // Una función con nombre function foo(a)

    { var b = 1; return a + b; } // Una referencia a una función anónima var foo = function (a) { var b = 1; return a + b; }; // Invocamos una función pasando otra función anónima // como argumento (callback) $.get('/someurl', function (err, res) { if (err) { return console.error(err); } // Hacemos algo con `res`... }); Monday, 10 December 12
  6. var results = db.query('SELECT * FROM ...'); // Hacemos algo

    con `results`. Tres paradigmas Bloqueando I/O Monday, 10 December 12
  7. db.query('SELECT * FROM ...', function (err, results) { if (err)

    { // Hubo un error! } // ... }); Tres paradigmas Callback Monday, 10 December 12
  8. db.query('SELECT * FROM ...') .on('error', function (err) { // Houston,

    tenemos un problema... }) .on('result', function (row) { // ... }) .on('end', function () { // Ya se han emitido todos los resultados. }); Tres paradigmas EventEmitter Monday, 10 December 12
  9. “Streams are to time as arrays are to space.” --

    Jed Schmidt @ JSConf.eu Monday, 10 December 12
  10. UNIX pipes en el terminal $ ls | grep ‘^node’

    shell ls grep shell stdin stdin stdout stdout Monday, 10 December 12
  11. Streams a.pipe(b); // a | b a.pipe(b).pipe(c).pipe(d); // a |

    b | c | d http.createServer(function (req, res) { fs.createReadStream(__dirname + '/rows.json').pipe(res); }); a.pipe(b).pipe(a); Monday, 10 December 12
  12. Tipos de Streams • Readable • Writable • Through /

    Filter • Duplex • ... Monday, 10 December 12