node.js A quick tour                15.02.2011 (v4)
About • Felix Geisendörfer • 23 years • Berlin, Germany@felixge
Core Contributor                    &              Module Authornode-mysql                      node-formidable
File uploading & processing as an infrastructure     service for web & mobile applications.
Audience?
Nodes goal is to provide an easy way to build        scalable network programs.
Node.js• Created by Ryan Dahl• Google’s V8 JavaScript engine (no DOM)• Module system, I/O bindings, Common Protocols
Installing$ git clone git://github.com/ry/node.git$ cd node$ ./configure$ make install
Hello World$ cat test.jsconsole.log(Hello World);$ node test.jsHello World
Ingredients         libeio            libevc-ares                      V8             http_parser
Philosophy• Just enough core-library to do I/O• Non-blocking• Close to the underlaying system calls
Non-blocking I/O
Blocking I/Ovar a = db.query(SELECT A);console.log(result a:, a);var b = db.query(SELECT B);console.log(result b:, b);    ...
Non-Blocking I/Odb.query(SELECT A, function(result) {  console.log(result a:, result);});db.query(SELECT B, function(resul...
Non-Blocking I/O• Offload most things to the kernel and poll  for changes (select, epoll, kqueue, etc.)• Thread pool for an...
Single Threadedvar a = [];function f() {  a.push(1);  a.push(2);}setTimeout(f, 10);setTimeout(f, 10);
Single Threadedvar a = [];function f() {       • [1, 1, 2, 2] ?  a.push(1);  a.push(2);}                    • [1, 2, 1, 2]...
Single Threadedvar a = [];function f() {       • [1, 1, 2, 2]  a.push(1);  a.push(2);}                    • [1, 2, 1, 2]se...
API Overview
CommonJS Modules$ cat hello.jsexports.world = function() {   return Hello World;};$ cat main.jsvar hello = require(./hello...
Child processes$ cat child.jsvar spawn = require(child_process).spawn;var cmd = echo hello; sleep 1; echo world;;var child...
Http Server$ cat http.jsvar http = require(http);http.createServer(function(req, res) {  setTimeout(function() {    res.wr...
Tcp Server$ cat tcp.jsvar tcp = require(tcp);tcp.createServer(function(socket) {  socket    .on(connect, function() {     ...
DNS$ cat dns.jsvar dns = require(dns);dns.resolve(nodejs.org, function(err, addresses) { console.log(addresses);});$ node ...
Watch File$ cat watch.jsvar fs = require(fs);fs.watchFile(__filename, function() {  console.log(You changed me!);  process...
And much more• UDP            • Buffer• Crypto         • Script• Assert         • EcmaScript5           ...
Suitable Applications
Suitable Applications• Singe-page apps• Real time• Crawlers
More Applications• Async chaining of unix tools• Streaming• File uploading
Interesting projects
Package management
Web Frameworks• Express.js (Sinatra clone)• Fab.js (Mind-bending & awesome)
DOM• node-htmlparser• jquery• node.io
WebSockets Socket.IO
1171 modules in npm
Ready for production?
Ready for production?• 0.4 was released last week• API has settled down for most parts• Very few bugs, but YMMV
Things that suck
Things that suck• Stack traces are lost at the event loop  boundary• Utilizing multiple cores requires multiple  processes...
Community
Benevolent Dictator For Life          Ryan Dahl
Community• Mailing list (nodejs, nodejs-dev)• IRC (#node.js)
Hosting
Questions?✎   @felixge / felix@debuggable.com
Bonus Slides
Speed
Speedvar http = require(’http’)var b = new Buffer(1024*1024);http.createServer(function (req, res) {  res.writeHead(200); ...
Speed100 concurrent clients1 megabyte responsenode 822 req/secnginx 708thin 85mongrel 4(bigger is better)                 ...
Speed• NGINX peaked at 4mb of memory• Node peaked at 60mb• Very special circumstances                                  by ...
Questions?✎   @felixge / felix@debuggable.com
Upcoming SlideShare
Loading in...5
×

Nodejs - A quick tour (v4)

13,843

Published on

Talk given at the Atlanta JS Meetup (@ATLJavaScript) on Feb 15, 2011.

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
13,843
On Slideshare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
67
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Nodejs - A quick tour (v4)

  1. 1. node.js A quick tour 15.02.2011 (v4)
  2. 2. About • Felix Geisendörfer • 23 years • Berlin, Germany@felixge
  3. 3. Core Contributor & Module Authornode-mysql node-formidable
  4. 4. File uploading & processing as an infrastructure service for web & mobile applications.
  5. 5. Audience?
  6. 6. Nodes goal is to provide an easy way to build scalable network programs.
  7. 7. Node.js• Created by Ryan Dahl• Google’s V8 JavaScript engine (no DOM)• Module system, I/O bindings, Common Protocols
  8. 8. Installing$ git clone git://github.com/ry/node.git$ cd node$ ./configure$ make install
  9. 9. Hello World$ cat test.jsconsole.log(Hello World);$ node test.jsHello World
  10. 10. Ingredients libeio libevc-ares V8 http_parser
  11. 11. Philosophy• Just enough core-library to do I/O• Non-blocking• Close to the underlaying system calls
  12. 12. Non-blocking I/O
  13. 13. Blocking I/Ovar a = db.query(SELECT A);console.log(result a:, a);var b = db.query(SELECT B);console.log(result b:, b); Time = SUM(A, B)
  14. 14. Non-Blocking I/Odb.query(SELECT A, function(result) { console.log(result a:, result);});db.query(SELECT B, function(result) { console.log(result b:, result);}); Time = MAX(A, B)
  15. 15. Non-Blocking I/O• Offload most things to the kernel and poll for changes (select, epoll, kqueue, etc.)• Thread pool for anything else
  16. 16. Single Threadedvar a = [];function f() { a.push(1); a.push(2);}setTimeout(f, 10);setTimeout(f, 10);
  17. 17. Single Threadedvar a = [];function f() { • [1, 1, 2, 2] ? a.push(1); a.push(2);} • [1, 2, 1, 2] ?setTimeout(f, 10); • BAD ACCESS ?setTimeout(f, 10);
  18. 18. Single Threadedvar a = [];function f() { • [1, 1, 2, 2] a.push(1); a.push(2);} • [1, 2, 1, 2]setTimeout(f, 10); • BAD ACCESSsetTimeout(f, 10);
  19. 19. API Overview
  20. 20. CommonJS Modules$ cat hello.jsexports.world = function() { return Hello World;};$ cat main.jsvar hello = require(./hello);console.log(hello.world());$ node main.jsHello World
  21. 21. Child processes$ cat child.jsvar spawn = require(child_process).spawn;var cmd = echo hello; sleep 1; echo world;;var child = spawn(sh, [-c, cmd]);child.stdout.on(data, function(chunk) { console.log(chunk.toString());});$ node child.js"hellon"# 1 sec delay"worldnn"
  22. 22. Http Server$ cat http.jsvar http = require(http);http.createServer(function(req, res) { setTimeout(function() { res.writeHead(200); res.end(Thanks for waiting!); }, 1000);}).listen(4000);$ curl localhost:4000# 1 sec delayThanks for waiting!
  23. 23. Tcp Server$ cat tcp.jsvar tcp = require(tcp);tcp.createServer(function(socket) { socket .on(connect, function() { socket.write("Hi, How Are You?n> "); }) .on(data, function(data) { socket.write(data); });}).listen(4000);$ nc localhost 4000Hi, How Are You?> Great!Great!
  24. 24. DNS$ cat dns.jsvar dns = require(dns);dns.resolve(nodejs.org, function(err, addresses) { console.log(addresses);});$ node dns.js[ 8.12.44.238 ]
  25. 25. Watch File$ cat watch.jsvar fs = require(fs);fs.watchFile(__filename, function() { console.log(You changed me!); process.exit(0);});$ node watch.js# edit watch.jsYou changed me!
  26. 26. And much more• UDP • Buffer• Crypto • Script• Assert • EcmaScript5 ...
  27. 27. Suitable Applications
  28. 28. Suitable Applications• Singe-page apps• Real time• Crawlers
  29. 29. More Applications• Async chaining of unix tools• Streaming• File uploading
  30. 30. Interesting projects
  31. 31. Package management
  32. 32. Web Frameworks• Express.js (Sinatra clone)• Fab.js (Mind-bending & awesome)
  33. 33. DOM• node-htmlparser• jquery• node.io
  34. 34. WebSockets Socket.IO
  35. 35. 1171 modules in npm
  36. 36. Ready for production?
  37. 37. Ready for production?• 0.4 was released last week• API has settled down for most parts• Very few bugs, but YMMV
  38. 38. Things that suck
  39. 39. Things that suck• Stack traces are lost at the event loop boundary• Utilizing multiple cores requires multiple processes• V8: 1.9 GB heap limit / GC can be problematic
  40. 40. Community
  41. 41. Benevolent Dictator For Life Ryan Dahl
  42. 42. Community• Mailing list (nodejs, nodejs-dev)• IRC (#node.js)
  43. 43. Hosting
  44. 44. Questions?✎ @felixge / felix@debuggable.com
  45. 45. Bonus Slides
  46. 46. Speed
  47. 47. Speedvar http = require(’http’)var b = new Buffer(1024*1024);http.createServer(function (req, res) { res.writeHead(200); res.end(b);}).listen(8000); by Ryan Dahl
  48. 48. Speed100 concurrent clients1 megabyte responsenode 822 req/secnginx 708thin 85mongrel 4(bigger is better) by Ryan Dahl
  49. 49. Speed• NGINX peaked at 4mb of memory• Node peaked at 60mb• Very special circumstances by Ryan Dahl
  50. 50. Questions?✎ @felixge / felix@debuggable.com
  1. Gostou de algum slide específico?

    Recortar slides é uma maneira fácil de colecionar informações para acessar mais tarde.

×