Node.js is a JavaScript runtime built on Chrome's V8 engine that uses an event-driven, non-blocking I/O model. It was created by Ryan Dahl in 2009 and is used for building fast and scalable network applications. Node uses an event loop model that makes it lightweight and efficient as opposed to the thread-based model that is typically used for servers. It allows for real-time web applications and helps solve the C10K problem of handling a large number of concurrent connections efficiently.
2. 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.
3. 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
10. Event Loop
●Efficient (if used asynchronously)
●Only one stack
●No memory overhead
●Simpler model (no deadlocks, no race
conditions ...)
11. 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
12. The C10K Problem ...
●C = Concurrent
●http://www.kegel.com/c10k.html
http://blog.webfaction.com/a-little-holiday-present
13. The C10K Problem ...
●Using one thread per connection is memory-
bound
http://blog.webfaction.com/a-little-holiday-present
15. Why JavaScript?
●JS devs already think asynchronously
(Browsers + AJAX)
●JS is fast and getting faster
●JS quickly is becoming a compilation target
o https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-
compile-to-JS
●Code sharing between the client and server
o Maybe common libs ...
●JSON native and full application stack
o MongoDB, Node.js, Angular.js
16. 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.html
17. 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.
});
});
});
18. 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 Express
o Request
o Socket.io (LearnBoost)
o Jade
o ... 10k + more ...
20. 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
21. First Node Server
var http = require('http');
var s = http.createServer( function(req, res) {
res.writeHead( 200, { 'Content-Type' : 'text/plain' } );
res.end('Hello Worldn');
});
s.listen(8080);
●curl http://localhost:8080/
●curl -i -X GET http://localhost:8080/
●DEMO
22. Load Test & Profiling
●Using Apache Bench (ab) for Simple Load
Testing
oab -n 200 -c 200 http://127.0.0.1:8080/
●Profiling Node.js
o http://dtrace.org/blogs/dap/2012/04/25/profiling-node-js/
24. Other Resources
●Introduction to Node.js with Ryan Dahl
ohttp://youtu.be/jo_B4LTHi3I
●The Node Beginner Book
ohttp://www.nodebeginner.org
●Ryan Dahl - History of Node.js
ohttp://youtu.be/SAc0vQCC6UQ
●What is Node? (Free)
ohttp://shop.oreilly.com/product/0636920021506.do
●Ryan Dahl's 2009 slides
ohttp://s3.amazonaws.com/four.livejournal/20091117/j
sconf.pdf