JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

67
Node.js How JavaScript is Changing Server Programming Tom Hughes-Croucher @sh1mmer

description

 

Transcript of JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Page 1: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Node.jsHow JavaScript is Changing Server Programming

Tom Hughes-Croucher @sh1mmer

Page 2: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

This is how we roll

1. Server-Side JavaScript Overview

2. Introduction to Node.js

3. The Node.js ecosystem

4. Getting started

Page 3: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Server Side Javascript IS SO AWESOMEMY ENTIRE PRESENTATION IS IN

COMIC SANS AND YOU WILL STILL LOVE ME AT THE END

Page 4: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Why SSJS?

Page 5: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

JavaScript programmers

3 > 2 > 1

Page 6: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Massive Code base of YUI and other JS librariesI heard some people use this thing called jQuery,

but I’m not convinced it’ll catch on

Page 7: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Laziness or “I’m sick of writing stuff twice”I could have said efficiency, but I think we all secretly long

to lounge around in our y-fronts.

Page 8: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Progressive Enhancement is free*Remember WWCD (What Would Crockford Do)

*close enough

Page 9: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

TL;DR:SSJS is Awesome

Like a Unicorn riding a Narwhal

Page 10: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York
Page 11: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Why now?

Page 12: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

1. Professionalism

Page 13: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York
Page 14: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

“Yahoo!'s corporate motto is: Don't be

eval().“

Page 15: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

“Doug Crockford's JavaScript is so strict, that uncaught

exceptions would trigger global thermonuclear war“

Page 16: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

2. JavaScript Runtimes

Page 17: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Runtimes

• V8 (Google), C++

• Spider Monkey (Mozilla), C++

• Rhino (Mozilla), Java

• JavaScript Core (Apple), C++

Page 18: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

JavaScript Performance

V8

Spider Monkey

Page 19: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Node.js• Server-side JavaScript process

• Uses V8

• Non-blocking

• Event Driven

• CommonJS module format

Page 20: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Node.js• Server-side JavaScript process

• Uses V8

• Non-blocking

• Event Driven

• CommonJS module format

AWESOME!

Page 21: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Node is ☜⎻⎻⎻⎻⎻☞

this fast

Page 22: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

concurrency=300, Smaller is Better

response size (bytes)

resp

on

se

tim

e (

ms)

100

200

300

400

24

26

28

210

212

214

216

218

server

nginxthintornadonode_buffer

Page 23: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York
Page 24: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Why non-blocking matters

Page 25: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

var result = db.query("select * from T"); // use result

Page 26: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

What are we waiting for?

Page 27: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Event Loop vs. Threads

Page 28: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Apache vs NGINXconcurrency ! reqs/sec

http://blog.webfaction.com/a-little-holiday-present

Page 29: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Apache vs NGINXconcurrency ! memory

http://blog.webfaction.com/a-little-holiday-present

Page 30: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Node Basics

Page 31: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

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/');

Page 32: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

var http = require('http');

//include the http library

Page 33: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

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

Page 34: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

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

Page 35: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

console.log('Server running at http://127.0.0.1:8124/');

//write Server is running at http://127.0.0.1:8124///to the console

Page 36: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Node Ecosystem

Page 37: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York
Page 38: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York
Page 39: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York
Page 40: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York
Page 41: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York
Page 42: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York
Page 43: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York
Page 44: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York
Page 45: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York
Page 46: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York
Page 47: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

NPMNode Package Manager

Page 48: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

npm install mustache

Page 49: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

NPM is written in JavaScript!

Page 50: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

// kludge until this is normal.if (!process.EventEmitter.prototype.on) {  process.EventEmitter.prototype.on = process.EventEmitter.prototype.addListener}var path = require("path")if (!process.execPath) {  process.execPath = path.join(process.installPrefix, "bin", "node")}

var npm = exports  , set = require("./lib/utils/set")  , get = require("./lib/utils/get")  , ini = require("./lib/utils/ini")  , log = require("./lib/utils/log")  , fs = require("fs")

npm.commands = {}npm.SHOULD_EXIT = true

try {  var j = JSON.parse(fs.readFileSync(path.join(__dirname, "package.json"))+"")  npm.version = j.version} catch (ex) {  log(ex, "error reading version")  npm.version = ex}

Page 51: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

node-replInteractive JavaScript terminal

Page 52: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Which libraries to use?

Page 53: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Mustache.js

Page 54: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York
Page 55: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

var view = { title: "Joe", calc: function() { return 2 + 4; }}

var template = "{{title}} spends {{calc}}";

var html = Mustache.to_html(template, view);

Page 56: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Expresshttp://expressjs.com

Page 57: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

MVC with Express

var app = express.createServer();

app.get('/', function(req, res){ res.render('index.haml', { locals: { title: 'My Site' } });});

app.listen(3000);

Page 58: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

node-paperboy

Page 59: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York
Page 60: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Other Examples

Page 61: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

http://wargamez.mape.net

Page 62: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

DOM+YUI3

Page 64: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Multi-core Node.jsNode+Web Workers

Page 65: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

var sys = require('sys');var Worker = require('webworker').Worker;

var w = new Worker('foo.js');

w.onmessage = function(e) { sys.debug('Received mesage: ' + sys.inspect(e)); w.terminate();};

w.postMessage({ foo : 'bar' });

onmessage = function(e) { postMessage({ test : 'this is a test' });};

onclose = function() { sys.debug('Worker shuttting down.');};

Master

Worker

Page 66: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Summary• SSJS is awesome because

• We are JavaScript programmers

• Reuse (libraries/code)

• Progressive Enhancement

• Node.js + YUI3 rocks

• YUI 3’s was easy to get running on Node.js

• Server side DOM allows for a single code base

Page 67: JavaScript is the new black - Why Node.js is going to rock your world - Web 2.0 New York

Today presentation wasBrought to you by

the letters:J and S

And the fonts:Comic Sansmonofur

Tom Hughes-Croucher@sh1mmer

[email protected]

Slides, etc --> http://speakerrate.com/sh1mmer

Pls rate me. kthxbai.