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

Node.js and How JavaScript is Changing Server Programming

Embed Size (px)

DESCRIPTION

Node.js is a highly concurrent JavaScript server written on top of the V8 JavaScript runtime. This is awesome for a number of reasons. Firstly Node.js has re-architected some of the core module of V8 to create a server implementation that is non-blocking (similar to other event driven frameworks like Ruby’s Event Machine or Python’s Twisted). Event driven architectures are a natural fit for JavaScript developers because it’s already how the browser works. By using an event driven framework Node is not only intuitive to use but also highly scalable. Tests have shown Node instances running tens of thousands of simultaneous users.This session will explore the architectural basics of Node.js and how it’s different from blocking server implementations such as PHP, Rail or Java Servlets. We’ll explore some basic examples of creating a simple server, dealing with HTTP requests, etc.The bigger question is once we have this awesome programming environment, what do we do with it? Node already has a really vibrant collection of modules which provide a range of functionality. Demystifying what’s available is pretty important to actually getting stuff done with Node. Since Node itself is very low level, lot’s of things people expect in web servers aren’t automatically there (for example, request routing). In order to help ease people into using Node this session will look at a range of the best modules for Node.js.

Citation preview

Page 1: Node.js and How JavaScript is Changing Server Programming

Node.jsHow JavaScript is Changing Server Programming

Tom Hughes-Croucher @sh1mmer

Page 2: Node.js and How JavaScript is Changing Server Programming

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: Node.js and How JavaScript is Changing Server Programming

Server Side Javascript IS SO AWESOMEMY ENTIRE PRESENTATION IS IN

COMIC SANS AND YOU WILL STILL LOVE ME AT THE END

Page 4: Node.js and How JavaScript is Changing Server Programming

Why SSJS?

Page 5: Node.js and How JavaScript is Changing Server Programming

JavaScript programmers

3 > 2 > 1

Page 6: Node.js and How JavaScript is Changing Server Programming

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: Node.js and How JavaScript is Changing Server Programming

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: Node.js and How JavaScript is Changing Server Programming

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

*close enough

Page 9: Node.js and How JavaScript is Changing Server Programming

TL;DR:SSJS is Awesome

Like a Unicorn riding a Narwhal

Page 10: Node.js and How JavaScript is Changing Server Programming
Page 11: Node.js and How JavaScript is Changing Server Programming

Why now?

Page 12: Node.js and How JavaScript is Changing Server Programming

1. Professionalism

Page 13: Node.js and How JavaScript is Changing Server Programming
Page 14: Node.js and How JavaScript is Changing Server Programming

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

eval().“

Page 15: Node.js and How JavaScript is Changing Server Programming

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

exceptions would trigger global thermonuclear war“

Page 16: Node.js and How JavaScript is Changing Server Programming

2. JavaScript Runtimes

Page 17: Node.js and How JavaScript is Changing Server Programming

Runtimes

• V8 (Google), C++

• Spider Monkey (Mozilla), C++

• Rhino (Mozilla), Java

• JavaScript Core (Apple), C++

Page 18: Node.js and How JavaScript is Changing Server Programming

JavaScript Performance

V8

Spider Monkey

Page 19: Node.js and How JavaScript is Changing Server Programming

Node.js• Server-side JavaScript process

• Uses V8

• Non-blocking

• Event Driven

• CommonJS module format

Page 20: Node.js and How JavaScript is Changing Server Programming

Node.js• Server-side JavaScript process

• Uses V8

• Non-blocking

• Event Driven

• CommonJS module format

AWESOME!

Page 21: Node.js and How JavaScript is Changing Server Programming

Node is ☜⎻⎻⎻⎻⎻☞

this fast

Page 22: Node.js and How JavaScript is Changing Server Programming

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: Node.js and How JavaScript is Changing Server Programming
Page 24: Node.js and How JavaScript is Changing Server Programming

Why non-blocking matters

Page 25: Node.js and How JavaScript is Changing Server Programming

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

Page 26: Node.js and How JavaScript is Changing Server Programming

What are we waiting for?

Page 27: Node.js and How JavaScript is Changing Server Programming

Event Loop vs. Threads

Page 28: Node.js and How JavaScript is Changing Server Programming

Apache vs NGINXconcurrency ! reqs/sec

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

Page 29: Node.js and How JavaScript is Changing Server Programming

Apache vs NGINXconcurrency ! memory

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

Page 30: Node.js and How JavaScript is Changing Server Programming

Node Basics

Page 31: Node.js and How JavaScript is Changing Server Programming

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: Node.js and How JavaScript is Changing Server Programming

var http = require('http');

//include the http library

Page 33: Node.js and How JavaScript is Changing Server Programming

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: Node.js and How JavaScript is Changing Server Programming

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: Node.js and How JavaScript is Changing Server Programming

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: Node.js and How JavaScript is Changing Server Programming

Node Ecosystem

Page 37: Node.js and How JavaScript is Changing Server Programming
Page 38: Node.js and How JavaScript is Changing Server Programming
Page 39: Node.js and How JavaScript is Changing Server Programming
Page 40: Node.js and How JavaScript is Changing Server Programming
Page 41: Node.js and How JavaScript is Changing Server Programming
Page 42: Node.js and How JavaScript is Changing Server Programming
Page 43: Node.js and How JavaScript is Changing Server Programming
Page 44: Node.js and How JavaScript is Changing Server Programming
Page 45: Node.js and How JavaScript is Changing Server Programming
Page 46: Node.js and How JavaScript is Changing Server Programming
Page 47: Node.js and How JavaScript is Changing Server Programming

NPMNode Package Manager

Page 48: Node.js and How JavaScript is Changing Server Programming

npm install mustache

Page 49: Node.js and How JavaScript is Changing Server Programming

NPM is written in JavaScript!

Page 50: Node.js and How JavaScript is Changing Server Programming

// 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: Node.js and How JavaScript is Changing Server Programming

node-replInteractive JavaScript terminal

Page 52: Node.js and How JavaScript is Changing Server Programming

Which libraries to use?

Page 53: Node.js and How JavaScript is Changing Server Programming

Mustache.js

Page 54: Node.js and How JavaScript is Changing Server Programming
Page 55: Node.js and How JavaScript is Changing Server Programming

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

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

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

Page 56: Node.js and How JavaScript is Changing Server Programming

node-paperboy

Page 57: Node.js and How JavaScript is Changing Server Programming
Page 59: Node.js and How JavaScript is Changing Server Programming
Page 60: Node.js and How JavaScript is Changing Server Programming

DOM+YUI3

Page 61: Node.js and How JavaScript is Changing Server Programming

Rendering HTML

http://yuiloader.davglass.com/calendar/

Page 62: Node.js and How JavaScript is Changing Server Programming

Multi-core Node.jsNode+Web Workers

Page 63: Node.js and How JavaScript is Changing Server Programming

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 64: Node.js and How JavaScript is Changing Server Programming

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 65: Node.js and How JavaScript is Changing Server Programming

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.