Nodejs - A quick tour (v5)
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Nodejs - A quick tour (v5)

on

  • 3,256 views

 

Statistics

Views

Total Views
3,256
Views on SlideShare
3,254
Embed Views
2

Actions

Likes
1
Downloads
39
Comments
0

1 Embed 2

http://www.techgig.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Nodejs - A quick tour (v5) Presentation Transcript

  • 1. node.js A quick tour 15.02.2011 (v4)
  • 2. About • Felix Geisendörfer • Berlin, Germany • Debuggable Ltd
  • 3. @felixge
  • 4. File uploading & processing as an infrastructure service for web & mobile applications.
  • 5. Core Contributor & Module Authornode-mysql node-formidable
  • 6. Audience?
  • 7. Server-side JavaScript
  • 8. Server-side JavaScript• Netscape LiveWire (1996)• Rhino (1997)• 50+ plattforms since then
  • 9. What was the problem?• Slow engines• Lack of interest in JS until ~2005• Better competing plattforms
  • 10. Why JavaScript? 3 Reasons
  • 11. #1 - The good parts
  • 12. V8 (Chrome)SpiderMonkey (Firefox) JavaScriptCore (Safari) #2 - JS Engine Wars Chakra (IE9) Carakan (Opera)
  • 13. #3 - No I/O in the core
  • 14. Nodes goal is to provide an easy way to build scalable network programs.
  • 15. Node.js• Created by Ryan Dahl• Google’s V8 JavaScript engine (no DOM)• Module system, I/O bindings, Common Protocols
  • 16. Installing$ git clone git://github.com/ry/node.git$ cd node$ ./configure$ make install
  • 17. Hello World$ cat test.jsconsole.log(Hello World);$ node test.jsHello World
  • 18. Ingredients libeio libevc-ares V8 http_parser
  • 19. Philosophy• Just enough core-library to do I/O• Non-blocking• Close to the underlaying system calls
  • 20. Non-blocking I/O
  • 21. 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)
  • 22. 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)
  • 23. Non-Blocking I/O• Offload most things to the kernel and poll for changes (select, epoll, kqueue, etc.)• Thread pool for anything else
  • 24. Single Threadedvar a = [];function f() { a.push(1); a.push(2);}setTimeout(f, 10);setTimeout(f, 10);
  • 25. 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);
  • 26. 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);
  • 27. API Overview
  • 28. CommonJS Modules$ cat hello.jsexports.world = function() { return Hello World;};$ cat main.jsvar hello = require(./hello);console.log(hello.world());$ node main.jsHello World
  • 29. 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"
  • 30. 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!
  • 31. 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!
  • 32. DNS$ cat dns.jsvar dns = require(dns);dns.resolve(nodejs.org, function(err, addresses) { console.log(addresses);});$ node dns.js[ 8.12.44.238 ]
  • 33. 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!
  • 34. And much more• UDP • Buffer• Crypto • Script• Assert • EcmaScript5 ...
  • 35. Suitable Applications
  • 36. Suitable Applications• Singe-page apps• Real time• Crawlers
  • 37. More Applications• Async chaining of unix tools• Streaming• File uploading
  • 38. Interesting projects
  • 39. Package management
  • 40. Web Frameworks• Express.js (Sinatra clone)• Fab.js (Mind-bending & awesome)
  • 41. DOM• node-htmlparser• jquery• node.io
  • 42. WebSockets Socket.IO
  • 43. 1171 modules in npm
  • 44. Ready for production?
  • 45. Ready for production?• 0.4.2 was released on March 3rd• API has settled down for most parts• Very few bugs, but YMMV
  • 46. Things that suck
  • 47. 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
  • 48. Community
  • 49. Benevolent Dictator For Life Ryan Dahl
  • 50. Community• Mailing list (nodejs, nodejs-dev)• IRC (#node.js)
  • 51. Hosting
  • 52. Questions?✎ @felixge / felix@debuggable.com
  • 53. Bonus Slides
  • 54. Speed
  • 55. 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
  • 56. Speed100 concurrent clients1 megabyte responsenode 822 req/secnginx 708thin 85mongrel 4(bigger is better) by Ryan Dahl
  • 57. Speed• NGINX peaked at 4mb of memory• Node peaked at 60mb• Very special circumstances by Ryan Dahl
  • 58. Questions?✎ @felixge / felix@debuggable.com