T4T Trainingsday
NodeJs
Tim Sommer
Content
• About me
• Common Js
• Node Js
• Demo(s) !
• Grunt Js
• Demo !
About me
Super Sommer !
About me
Tim Sommer (@sommertim)
>3 years @ T4T
Passion for Front-End Development
http://blog.timsommer.be
https://github.com/timsommer
Learning JavaScript used to mean you weren't a
serious software developer. Today, not learning
Javascript means the same thing.
- Tim O'Reilly
History of JavaScript
Server side JavaScript?
• Has been around for a long time
• Very fragmented:
• Netscape started server-side scripting (SSJS),
December, 1994
• Mozilla Spidermonkey, C, Firefox > 3.5,
GNOME (started at Netscape), first engine
ever, 1996
• Mozilla Rhino, Java, 1997 (started by
Netscape for navigator)
• Google V8, Chrome, September 2, 2008.
• SquirrelFish (AKA JavaScriptCore), Webkit,
June 2, 2008
Server side problems?
• No compatible standard library.
• No standard interface to connect to a database.
• No standard method to insert different modules.
• No method for packaging code for distribution and
installation.
• Module storage of a common package that solves
dependency is necessary.
Commonjs ?
• Kevin Dangoor, January 2009
• Spec
• JavaScript ecosystem for web servers, desktop and
command line apps and in the browser.
• CommonJS-compliant systems:
• Server-side JavaScript applications
• Command line tools
• Desktop GUI-based applications
• Hybrid applications (Titanium, Adobe AIR)
Why Server Side js?
• Familiar and universal
• Same language on server and client
(code sharing)
• Notions from Self, Scheme, and
Prototype - all with a C/C++/Java-like
syntax.
• Server side JavaScript has the
potential to significantly outperform
other common dynamic languages.
Why Server Side js?
Common Spec?
• Modules
• Binary strings and buffers
• Charset encodings
• Binary, buffered, and textual input and output (io) streams
• System process arguments, environment, and streams
• File system interface
• Socket streams
• Unit test assertions, running, and reporting
• Web server gateway interface, JSGI
• Local and remote packages and package management
Common Spec?
Common Spec?
AMD?
• Asynchronous module definition
• Started as offspin (fork) of CommonJs
• Failed to reach an agreement in discussions with
CommonJS about using JavaScript module in an
asynchronous situation.
• Evolved in own module definition API
• The difference in the module specifications defined by
the two territories are in module load.
Implementations
• ArangoDB (V8): NoSQL
• CouchDB (SpiderMonkey): NoSQL
• AkShell (V8): browser based IDE
• Narwhal (V8, Rhino): JavaScript platform
• Requirejs (Web Browser): module loader
• Curljs (Web browser): resource loader
• Whenjs (Web browser): async promises library
• …
• Nodejs (V8)
Nodejs?
Nodejs?
• Event-driven
• Flow is determined by events
• Event loop
• Non-blocking I/O (AKA asynchronous I/O)
• I/O processing while permitting other processing to continue
• Parallel I/O
• You can do other things while waiting.
• You can wait on more than one thing at a time.
• CommonJS
• V8
What makes nodejs Fast?
• Node.js is fast by design
• Never blocking on I/O means less threads.
• This means YOU handle scheduling.
Node – Java runtime?
Java :
Node :
Concurrent Requests Avg Response time (ms) Requests/second
10 23 422
50 119 416
100 243 408
150 363 411
Concurrent Requests Avg Response time (ms) Requests/second
10 19 509
50 109 453
100 196 507
150 294 506
Node – Apache runtime?
Apache (PHP)
Node – Apache runtime?
Node
Programming in NodeJs
CPU intensive computations
• Node -> single threaded execution
model
• Fibonacci function = one event tick
• Blocking your node server completely
• IO (DB, Filesystem) is the bottleneck,
These calls are completely async
CPU intensive computations
CPU intensive computations
• NPM Modules:
• ‘flow’, ‘async’, ‘step’ and ‘Q’.
• ‘Threads a GoGo’ natively utilizes threading inside the
V8 engine (and therefore relies on a newer release of
node.js)
• ‘Webworkers’
Programming in NodeJs
Programming in NodeJs
Demo!
Node
CPU intensive computations
NPM
• NPM (Node Package Manager)
• express
• async
• grunt
• mocha
• helmet
• socket.io
• underscore
• ……… (> 50.000)
Demo!
Building a web-app with Express
Gruntjs
Gruntjs
• Task runner in Node
• Automation
• Minification, compilation, unit testing, linting, ..
• Custom tasks!
• Commonjs Compliant
Gruntjs
People will always want to do stupid things, and luckily for
those people, there's JSHint
-Douglas Crockford
Demo!
Automated tasks with Gruntjs
Q&A ?

T4T Training day - NodeJS

  • 1.
  • 2.
    Content • About me •Common Js • Node Js • Demo(s) ! • Grunt Js • Demo !
  • 3.
  • 4.
    About me Tim Sommer(@sommertim) >3 years @ T4T Passion for Front-End Development http://blog.timsommer.be https://github.com/timsommer
  • 5.
    Learning JavaScript usedto mean you weren't a serious software developer. Today, not learning Javascript means the same thing. - Tim O'Reilly
  • 7.
  • 8.
    Server side JavaScript? •Has been around for a long time • Very fragmented: • Netscape started server-side scripting (SSJS), December, 1994 • Mozilla Spidermonkey, C, Firefox > 3.5, GNOME (started at Netscape), first engine ever, 1996 • Mozilla Rhino, Java, 1997 (started by Netscape for navigator) • Google V8, Chrome, September 2, 2008. • SquirrelFish (AKA JavaScriptCore), Webkit, June 2, 2008
  • 9.
    Server side problems? •No compatible standard library. • No standard interface to connect to a database. • No standard method to insert different modules. • No method for packaging code for distribution and installation. • Module storage of a common package that solves dependency is necessary.
  • 10.
    Commonjs ? • KevinDangoor, January 2009 • Spec • JavaScript ecosystem for web servers, desktop and command line apps and in the browser. • CommonJS-compliant systems: • Server-side JavaScript applications • Command line tools • Desktop GUI-based applications • Hybrid applications (Titanium, Adobe AIR)
  • 11.
    Why Server Sidejs? • Familiar and universal • Same language on server and client (code sharing) • Notions from Self, Scheme, and Prototype - all with a C/C++/Java-like syntax. • Server side JavaScript has the potential to significantly outperform other common dynamic languages.
  • 12.
  • 13.
    Common Spec? • Modules •Binary strings and buffers • Charset encodings • Binary, buffered, and textual input and output (io) streams • System process arguments, environment, and streams • File system interface • Socket streams • Unit test assertions, running, and reporting • Web server gateway interface, JSGI • Local and remote packages and package management
  • 14.
  • 15.
  • 16.
    AMD? • Asynchronous moduledefinition • Started as offspin (fork) of CommonJs • Failed to reach an agreement in discussions with CommonJS about using JavaScript module in an asynchronous situation. • Evolved in own module definition API • The difference in the module specifications defined by the two territories are in module load.
  • 17.
    Implementations • ArangoDB (V8):NoSQL • CouchDB (SpiderMonkey): NoSQL • AkShell (V8): browser based IDE • Narwhal (V8, Rhino): JavaScript platform • Requirejs (Web Browser): module loader • Curljs (Web browser): resource loader • Whenjs (Web browser): async promises library • … • Nodejs (V8)
  • 19.
  • 20.
    Nodejs? • Event-driven • Flowis determined by events • Event loop • Non-blocking I/O (AKA asynchronous I/O) • I/O processing while permitting other processing to continue • Parallel I/O • You can do other things while waiting. • You can wait on more than one thing at a time. • CommonJS • V8
  • 21.
    What makes nodejsFast? • Node.js is fast by design • Never blocking on I/O means less threads. • This means YOU handle scheduling.
  • 22.
    Node – Javaruntime? Java : Node : Concurrent Requests Avg Response time (ms) Requests/second 10 23 422 50 119 416 100 243 408 150 363 411 Concurrent Requests Avg Response time (ms) Requests/second 10 19 509 50 109 453 100 196 507 150 294 506
  • 23.
    Node – Apacheruntime? Apache (PHP)
  • 24.
    Node – Apacheruntime? Node
  • 25.
  • 26.
    CPU intensive computations •Node -> single threaded execution model • Fibonacci function = one event tick • Blocking your node server completely • IO (DB, Filesystem) is the bottleneck, These calls are completely async
  • 27.
  • 28.
    CPU intensive computations •NPM Modules: • ‘flow’, ‘async’, ‘step’ and ‘Q’. • ‘Threads a GoGo’ natively utilizes threading inside the V8 engine (and therefore relies on a newer release of node.js) • ‘Webworkers’
  • 29.
  • 30.
  • 31.
  • 32.
    NPM • NPM (NodePackage Manager) • express • async • grunt • mocha • helmet • socket.io • underscore • ……… (> 50.000)
  • 33.
  • 35.
  • 36.
    Gruntjs • Task runnerin Node • Automation • Minification, compilation, unit testing, linting, .. • Custom tasks! • Commonjs Compliant
  • 37.
    Gruntjs People will alwayswant to do stupid things, and luckily for those people, there's JSHint -Douglas Crockford
  • 38.
  • 39.