Node.js Test

24
Node.js Thomas Amsler June 14, 2012 GDG Sacramento

Transcript of Node.js Test

Page 1: Node.js Test

Node.js

Thomas AmslerJune 14, 2012

GDG Sacramento

Page 2: Node.js Test

Node

●Created by Ryan Dahl in 2009. First presented at JSConf EU.

●Node is a platform built on Chrome's V8 JavaScript runtime for easily building fast, scalable network applications.

●Node uses an event-driven, non-blocking I/O model that makes it lightweight and efficient.

●Node is for data-intensive real-time applications that run across distributed devices.

Page 3: Node.js Test

Node ...

●Server Side JavaScript●Built on Google's V8 Runtime●Non-blocking I/O (Asynchronous)●Evented (Event Loop)●Module System●Native on Linux, Mac OS X, Windows●Enables Real-time Web●It's all about LATENCY

Page 4: Node.js Test

History

●Netscape LiveWire (1996)●Rhino (1997) [for Java]●Aptana Jaxer (2008)●RingoJS [for Java]●Narwhale●Node.js (2009)●IronJS [for .NET]

Page 5: Node.js Test

Synchronous vs Asynchronous

Page 6: Node.js Test

I/O is not free

●L1: 3 cycles●L2: 14 cycles●RAM: 250 cycles●DISK: 41,000,000 cycles●NETWORK: 240,000,000 cycles

http://duartes.org/gustavo/blog/post/what-your-computer-does-while-you-wait

Page 7: Node.js Test

Blocking I/O (Sync)

<?phpecho "Hello";file_get_contents("/path/to/file");echo " World";

?>

Page 8: Node.js Test

Threads

●Each Thread takes memory●Threads introduce additional complexity

oRace conditionsoDeadlockoAdditional setup overheado ...

Page 9: Node.js Test

Non-blocking I/O (Async)

console.log('Hello');fs.readFile('/path/to/file', function(err, data) { // do something ...});console.log(' World');

Page 10: Node.js Test

Event Loop

●Efficient (if used asynchronously)●Only one stack●No memory overhead●Simpler model (no deadlocks, no race

conditions ...)

Page 11: Node.js Test

The C10K Problem

●C10K refers to the problem of optimizing a web server to handle a large number of clients at the same time.

●C = CONCURRENT●Apache uses one thread per connection●NGINX doesn't use multiple threads but

instead uses an event loop●NGINX and Node.js are similar with respect

to utilizing an event loop to achieve high concurrency on low latency

Page 12: Node.js Test

The C10K Problem ...

●C = Concurrent●http://www.kegel.com/c10k.html

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

Page 13: Node.js Test

The C10K Problem ...●Using one thread per connection is memory-

bound

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

Page 14: Node.js Test

... back to Node.js ...

Page 15: Node.js Test

Why JavaScript?

●JS devs already think asynchronously (Browsers + AJAX)

●JS is fast and getting faster●JS quickly is becoming a compilation targeto https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-c

ompile-to-JS

●Code sharing between the client and servero Maybe common libs ...

●JSON native and full application stacko MongoDB, Node.js, Angular.js

Page 16: Node.js Test

Google's V8 JavaScript Engine

●V8 is a JavaScript engine specifically designed for fast execution of large JavaScript applications

●Used in Google's Chrome browser●Written in C++●Fast property access●Dynamic machine code generation●Efficient garbage collection● https://developers.google.com/v8/● http://blog.chromium.org/2012/05/better-code-optimization-decisions-for.ht

ml

Page 17: Node.js Test

The Node.js Darkside●Still relatively young●Bad idea to do raw computation in an event

loop. Use node-webworker●Debugging is hard but will significantly

improve in future versions●Callbacks (not really an issue)

doA( argA, function() {doB(argB, function() {

doC(argC, function() {// etc.

});});

});

Page 18: Node.js Test

Node Package Manager (NPM)

●NPM is a package manager for node. You can use it to install and publish your node programs. It manages dependencies and does other cool stuff.

●http://npmjs.org/●http://search.npmjs.org/o Expresso Requesto Socket.io (LearnBoost)o Jadeo ... 10k + more ...

Page 19: Node.js Test

Node Package Manager (NPM) ...

Node Core(V8, libev, libeio, ...)

Core Modules(http, net, ...)

Community-created Modules(express, socket.io, restify, ...)

Page 20: Node.js Test

Let's Node

●Read Evaluate Print Loop (REPL)oSimilar to Perl, Python, and Ruby

●It's great for testing out and learning about Node.js

●Since Node.js uses V8, Node REPL is an ideal place to easily try out and learn JavaScript

●DEMO

Page 21: Node.js Test

First Node Server

var http = require('http');var s = http.createServer( function(req, res) {

res.writeHead( 200, { 'Content-Type' : 'text/plain' } );res.end('Hello World\n');

});s.listen(8080);

● curl http://localhost:8080/● curl -i -X GET http://localhost:8080/● DEMO

Page 22: Node.js Test

Load Test & Profiling

●Using Apache Bench (ab) for Simple Load Testingoab -n 200 -c 200 http://127.0.0.1:8080/

●Profiling Node.jso http://dtrace.org/blogs/dap/2012/04/25/profiling-node-js/

Page 23: Node.js Test

Node.js Information

●APIohttp://nodejs.org/api

●SRCohttps://github.com/joyent/node

●How To Nodeohttp://howtonode.org

●StackOverflowohttp://stackoverflow.com/questions/tagged/node.js

●Projects & Companies using Node.jsohttp://goo.gl/Wcqtj

Page 24: Node.js Test

Other Resources

●Introduction to Node.js with Ryan Dahlohttp://youtu.be/jo_B4LTHi3I

●The Node Beginner Bookohttp://www.nodebeginner.org

●Ryan Dahl - History of Node.jsohttp://youtu.be/SAc0vQCC6UQ

●What is Node? (Free)ohttp://shop.oreilly.com/product/0636920021506.do

●Ryan Dahl's 2009 slidesohttp://s3.amazonaws.com/four.livejournal/20091117/

jsconf.pdf