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

Node.js - Dibi 2012

sh1mmer
April 19, 2012

Node.js - Dibi 2012

sh1mmer

April 19, 2012
Tweet

Other Decks in Technology

Transcript

  1. A language for the Internet Why JavaScript and Node.js is

    right for Internet Applications Tom Hughes-Croucher @sh1mmer
  2. Node.js? • Server Side JavaScript runtime • Built on top

    of V8 JavaScript engine from Google Chrome • Non-blocking I/O APIs • Easy to extend APIs and modules
  3. $Enki:~ $ node > 3 > 2 > 1 false

    > true == 1 true > true === 1 false
  4. var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type':

    'text/plain'}); res.end('Hello World\n'); }).listen(8124, "127.0.0.1"); console.log('Server running at http://127.0.0.1:8124/');
  5. http.createServer(function (req, res) { }).listen(8124, "127.0.0.1"); //create an http server

    //when ‘stuff’ happens call this anonymous function //listen on port 8124 of the IP 127.0.0.1
  6. http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); })

    //when ‘stuff’ happens my function fires //I get a request object and a response object //I write to the response object header //HTTP status 200 and content-type ‘text/plain’ //close the response with the body: //Hello World
  7. var http = require('http'); server = http.createServer(); server.on('request', function (req,

    res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }); server.listen(8124, "127.0.0.1"); console.log('Server running at http://127.0.0.1:8124/');
  8. var http = require('http'); server = http.createServer(); server.on('request', function (req,

    res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }); server.listen(8124, "127.0.0.1"); console.log('Server running at http://127.0.0.1:8124/'); Step 1. Evaluate 'Main'
  9. var http = require('http'); server = http.createServer(); server.on('request', function (req,

    res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }); server.listen(8124, "127.0.0.1"); console.log('Server running at http://127.0.0.1:8124/'); Step 1. variables: http -> http module server -> http server listeners: server.request -> function
  10. var http = require('http'); server = http.createServer(); server.on('request', function (req,

    res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }); server.listen(8124, "127.0.0.1"); console.log('Server running at http://127.0.0.1:8124/'); Step 2. Event Loop *
  11. var http = require('http'); server = http.createServer(); server.on('request', function (req,

    res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }); server.listen(8124, "127.0.0.1"); console.log('Server running at http://127.0.0.1:8124/'); Step 2. Do we have active listeners? listeners: server.request -> function Yes! Wait for listeners. *
  12. var http = require('http'); server = http.createServer(); server.on('request', function (req,

    res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }); server.listen(8124, "127.0.0.1"); console.log('Server running at http://127.0.0.1:8124/'); Step 3. Event Calls
  13. var http = require('http'); server = http.createServer(); server.on('request', function (req,

    res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }); server.listen(8124, "127.0.0.1"); console.log('Server running at http://127.0.0.1:8124/'); Step 3. 'request' is called. Since listeners: server.request -> function Call function
  14. var http = require('http'); server = http.createServer(); server.on('request', function (req,

    res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }); server.listen(8124, "127.0.0.1"); console.log('Server running at http://127.0.0.1:8124/'); Step 3. Loop! (go to Step 2.)
  15. //node.js style JavaScript query = mysql.query('SELECT * FROM data'); query.on(‘result’,

    function(result) { for(var i=0;i<length;i++) { var row = result.rows[i]; //do something with the row } });
  16. //threaded style JavaScript result = mysql.query('SELECT * FROM data'); for(var

    i=0;i<length;i++) { var row = result.rows[i]; //do something with the row }
  17. var x = "I am a string" ~1ns Running 1

    instruction 2ns Data from l1 cpu cache 5ns Data from l2 cpu cache 80ns Data from ram
  18. result = mysql.query('SELECT * FROM data'); ~100ms Time to run

    a query in database 50ms Time to roundtrip query over the network