Ansuman Roy
Agenda
 Introduction
 History
 Why Node.js
 Community
 Features
 FAQ
 Few Awesome Modules!
 Conclusion
get ready to node, this session is
hands on!
Introduction
 It’s NOT a web framework, and it’s also NOT a language
 Open Source, cross-platform runtime environment for
server-side and networking applications
 Based on Google V8 Engine Asynchronous i/o framework
 Core in c++ on top of v8
 Rest of it in javascript
 Swiss army knife for network Related stuffs
 Can handle thousands of Concurrent connections with
Minimal overhead (cpu/memory) on a single process
 Licence MIT
 Last release : v7.2.1
 385,151 + npm modules
History
 Initial Release May 27, 2009
 Created by Ryan Dahl
 Development && maintenance sponsored by Joyent
Is Node JS a serious option for enterprise
applications?
In fact, it’s our
best option for
typical (heavy
data IO) web
applications!
Let’s see why…
Why Node?
 Less keystrokes with JS
 JS on server and client allows
for more code reuse
 A lite stack (quick create-test
cycle)
 1 Language for Frontend and
Backend
 Large number of offerings for
web app creation
 Active community
Build Fast!
Why Node?
 Fast V8 Engine
 Single Thread with Event
Loop
 Great I/O performance
with event loop!
 Small number of layers
 Horizontal Scaling
Run Fast!
Why Node?
 JS across stack allows
easier refactoring
 Smaller codebase
 Cross platform( Windows,
Linux, Mac)
 See #1 (Build Fast!)
Adapt Fast!
“There’s a shift in enterprise IT,
unbundling the monolith software
packages [at many companies] that
Community
 Over 8 billion downloads per month
 NPM averages 461 new modules per day (ruby gems
37 per day, maven 156 per day)
 Total Number of npm Packages: 105,109
 Second most stared project on Github
 Plus, corporate backing from Joyent
Community
Reference : http://www.modulecounts.com/
Community
Running Node Apps
Hands On #1 – ‘Welcome Noder!’
Node Globals
process – object providing information and methods
for the current process
➢ process.stdout, process.stderr, process.stdin,
process.argv, process.env
 console – allows printing to stdout and stderr
 require() – function to load a module
 module – refers to the current module
Modules
 Modules allow Node to be extended (act as libaries)
 We can include a module with the global require
function, require(‘module’)
 Node provides core modules that can be included by
their name:
 File System – require(‘fs’)
 Http – require(‘http’)
 Utilities – require(‘util’)
Modules
 We can also break our application up into modules
and require them using a file path:
 ‘/’ (absolute path), ‘./’ and ‘../’ (relative to calling file)
 Any valid type can be exported from a module by
assigning it to module.exports
Modules
bar.js
module.exports = ‘I am a string’
foo.js
var msg = require(‘./bar.js’)
console.log(msg) // prints ‘I am a string’
Modules
bar.js
module.exports.hello = function() {return ‘hello’}
module.exports.bye = function() {return ‘bye’}
foo.js
var bar = require(‘./bar.js’)
console.log(bar.hello()) // prints ‘hello’
console.log(bar.bye()) // prints ‘bye’
Requiring Modules, File System, Args
Hands On #2 – ‘Require It’
Node Architecture
V8
Thread
Pool
(libeio)
Event
Loop
(libev)
Node Bindings
(socket, http, etc.)
Node Standard Library
C
C++
JavaScript
Node Architecture
 Node handles requests with a single thread (the
event loop)!
Node Architecture
 How can this be faster?
 Expensive I/O is moved off request thread (in
traditional multi-threaded environments, each thread
handles the complete request)
 Threads are limited by RAM and are expensive to create
 Avoids context switching
 Allows us to easily write asynchronous code without
heavy thread management (synchronization,
message passing, etc.)
Node Architecture
Node Architecture
Warning! Be careful to keep
CPU intensive operations off
the event loop.
Http and Streams
Hands On #3 – ‘Real Time Data Flow’
NPM
 Modules can be shared by packaging
 Node Package Manager (NPM) is a package manager
for node
 Command line interface
 Public registry www.npmjs.org
 Allows us to install packages from repo, and publish our
own
NPM
 First, we need to create a package.json file for our
app
 Contains metadata for our app and lists the
dependencies
 Package.json Interactive Guide
NPM
 Common npm commands:
 npm init initialize a package.json file
 npm install <package name> -g install a package, if –g option is
given package will be installed as a global, --save and --save-dev will add package
to your dependencies
 npm install install packages listed in package.json
 npm ls –g listed local packages (without –g) or global packages (with –g)
 npm update <package name> update a package
NPM
 SemVar Versions (version [Major].[Minor].[Patch]):
 = (default), >, <, >=, <=
 * most recent version
 1.2.3 – 2.3.4 version greater than 1.2.3 and less than 2.3.4
 ~1.2.3 most recent patch version greater than or equal to 1.2.3 (>=1.2.3 <1.3.0)
 ^1.2.3 most recent minor version greater than or equal to 1.2.3 (>=1.2.3 <2.0.0)
Http and Express
Hands On #4 – ‘Services’
FAQ
 V8 engine performs just as good, if not better than jvm
 Most ‘intensive’ code is usually due to I/O
 If needed, child processes, web workers, and so forth can be used
○ Of course! As always, be aware of language holes (like ‘eval’)
○ Node Security Project lists vulnerabilities in packages
What about CPU intensive code?
Is Node secure?
FAQ
○ Most ‘cryptic’ code is DOM related (ex. selectors)
○ Preprocessors and ECMAScript 6 bringing more strict typing (and
compile time checking)
○ As always, need standards and best practices!
What about code
readability/maintenance with JavaScript?
FAQ
○ Built-in Node debugger not great, but IDEs and other tools have the
usual debugging experience
○ V. 0.12 will improve tracing capabilities to allow better performance
monitoring, and production grade tools such as New Relic
Isn’t debugging and production
monitoring bad?
Other Awesome Modules
 skipper-gridfs – A skipper adapter to allow uploading
files to MongoDB's GridFS
 async – higher order functions and common patterns for
asynchronous code
 fs-extra– fs-extra contains methods that aren't included
in the vanilla Node.js fs package. Such as mkdir -p, cp -r,
and rm -rf
 request – Simplified HTTP request client
 mongoose – MongoDB ODM
Other Awesome Modules
 sails– API-driven framework for building realtime apps,
using MVC conventions (based on Express and Socket.io)
 express – Fast, unopinionated, minimalist web
framework
 jsreport– javascript based business reporting
 config – runtime configuration
 xls-to-json – Converting xls file to json files using nodejs
Thanks!
http://nodejs.org/
https://www.npmjs.com/
Learn More at

Node js meetup

  • 1.
  • 2.
    Agenda  Introduction  History Why Node.js  Community  Features  FAQ  Few Awesome Modules!  Conclusion get ready to node, this session is hands on!
  • 4.
    Introduction  It’s NOTa web framework, and it’s also NOT a language  Open Source, cross-platform runtime environment for server-side and networking applications  Based on Google V8 Engine Asynchronous i/o framework  Core in c++ on top of v8  Rest of it in javascript  Swiss army knife for network Related stuffs  Can handle thousands of Concurrent connections with Minimal overhead (cpu/memory) on a single process
  • 5.
     Licence MIT Last release : v7.2.1  385,151 + npm modules
  • 6.
    History  Initial ReleaseMay 27, 2009  Created by Ryan Dahl  Development && maintenance sponsored by Joyent
  • 7.
    Is Node JSa serious option for enterprise applications? In fact, it’s our best option for typical (heavy data IO) web applications! Let’s see why…
  • 8.
    Why Node?  Lesskeystrokes with JS  JS on server and client allows for more code reuse  A lite stack (quick create-test cycle)  1 Language for Frontend and Backend  Large number of offerings for web app creation  Active community Build Fast!
  • 9.
    Why Node?  FastV8 Engine  Single Thread with Event Loop  Great I/O performance with event loop!  Small number of layers  Horizontal Scaling Run Fast!
  • 10.
    Why Node?  JSacross stack allows easier refactoring  Smaller codebase  Cross platform( Windows, Linux, Mac)  See #1 (Build Fast!) Adapt Fast! “There’s a shift in enterprise IT, unbundling the monolith software packages [at many companies] that
  • 11.
    Community  Over 8billion downloads per month  NPM averages 461 new modules per day (ruby gems 37 per day, maven 156 per day)  Total Number of npm Packages: 105,109  Second most stared project on Github  Plus, corporate backing from Joyent
  • 12.
  • 13.
  • 14.
    Running Node Apps HandsOn #1 – ‘Welcome Noder!’
  • 15.
    Node Globals process –object providing information and methods for the current process ➢ process.stdout, process.stderr, process.stdin, process.argv, process.env  console – allows printing to stdout and stderr  require() – function to load a module  module – refers to the current module
  • 16.
    Modules  Modules allowNode to be extended (act as libaries)  We can include a module with the global require function, require(‘module’)  Node provides core modules that can be included by their name:  File System – require(‘fs’)  Http – require(‘http’)  Utilities – require(‘util’)
  • 17.
    Modules  We canalso break our application up into modules and require them using a file path:  ‘/’ (absolute path), ‘./’ and ‘../’ (relative to calling file)  Any valid type can be exported from a module by assigning it to module.exports
  • 18.
    Modules bar.js module.exports = ‘Iam a string’ foo.js var msg = require(‘./bar.js’) console.log(msg) // prints ‘I am a string’
  • 19.
    Modules bar.js module.exports.hello = function(){return ‘hello’} module.exports.bye = function() {return ‘bye’} foo.js var bar = require(‘./bar.js’) console.log(bar.hello()) // prints ‘hello’ console.log(bar.bye()) // prints ‘bye’
  • 20.
    Requiring Modules, FileSystem, Args Hands On #2 – ‘Require It’
  • 21.
  • 22.
    Node Architecture  Nodehandles requests with a single thread (the event loop)!
  • 23.
    Node Architecture  Howcan this be faster?  Expensive I/O is moved off request thread (in traditional multi-threaded environments, each thread handles the complete request)  Threads are limited by RAM and are expensive to create  Avoids context switching  Allows us to easily write asynchronous code without heavy thread management (synchronization, message passing, etc.)
  • 24.
  • 25.
    Node Architecture Warning! Becareful to keep CPU intensive operations off the event loop.
  • 26.
    Http and Streams HandsOn #3 – ‘Real Time Data Flow’
  • 27.
    NPM  Modules canbe shared by packaging  Node Package Manager (NPM) is a package manager for node  Command line interface  Public registry www.npmjs.org  Allows us to install packages from repo, and publish our own
  • 28.
    NPM  First, weneed to create a package.json file for our app  Contains metadata for our app and lists the dependencies  Package.json Interactive Guide
  • 29.
    NPM  Common npmcommands:  npm init initialize a package.json file  npm install <package name> -g install a package, if –g option is given package will be installed as a global, --save and --save-dev will add package to your dependencies  npm install install packages listed in package.json  npm ls –g listed local packages (without –g) or global packages (with –g)  npm update <package name> update a package
  • 30.
    NPM  SemVar Versions(version [Major].[Minor].[Patch]):  = (default), >, <, >=, <=  * most recent version  1.2.3 – 2.3.4 version greater than 1.2.3 and less than 2.3.4  ~1.2.3 most recent patch version greater than or equal to 1.2.3 (>=1.2.3 <1.3.0)  ^1.2.3 most recent minor version greater than or equal to 1.2.3 (>=1.2.3 <2.0.0)
  • 31.
    Http and Express HandsOn #4 – ‘Services’
  • 32.
    FAQ  V8 engineperforms just as good, if not better than jvm  Most ‘intensive’ code is usually due to I/O  If needed, child processes, web workers, and so forth can be used ○ Of course! As always, be aware of language holes (like ‘eval’) ○ Node Security Project lists vulnerabilities in packages What about CPU intensive code? Is Node secure?
  • 33.
    FAQ ○ Most ‘cryptic’code is DOM related (ex. selectors) ○ Preprocessors and ECMAScript 6 bringing more strict typing (and compile time checking) ○ As always, need standards and best practices! What about code readability/maintenance with JavaScript?
  • 34.
    FAQ ○ Built-in Nodedebugger not great, but IDEs and other tools have the usual debugging experience ○ V. 0.12 will improve tracing capabilities to allow better performance monitoring, and production grade tools such as New Relic Isn’t debugging and production monitoring bad?
  • 35.
    Other Awesome Modules skipper-gridfs – A skipper adapter to allow uploading files to MongoDB's GridFS  async – higher order functions and common patterns for asynchronous code  fs-extra– fs-extra contains methods that aren't included in the vanilla Node.js fs package. Such as mkdir -p, cp -r, and rm -rf  request – Simplified HTTP request client  mongoose – MongoDB ODM
  • 36.
    Other Awesome Modules sails– API-driven framework for building realtime apps, using MVC conventions (based on Express and Socket.io)  express – Fast, unopinionated, minimalist web framework  jsreport– javascript based business reporting  config – runtime configuration  xls-to-json – Converting xls file to json files using nodejs
  • 37.

Editor's Notes

  • #4 Node is open source with MIC license under Joyent
  • #5 Node is an Asynchronous i/o framework; Not just another web framework
  • #7 Ryan inspired to show progress of a file upload; So that’s why Node get invented. Wow!
  • #9 Even with less no of developers than in java we can build fast in Node js
  • #12 Ryan inspired to show progress of a file upload
  • #13 Ryan inspired to show progress of a file upload
  • #18 Can install modules using the command npm install module
  • #20 Mention exports alias (variable)
  • #24 Creates threads only when needed (for IO) Mention options for mutli-threading (cluster) process.nextTick()
  • #25 Ruby on rails to node Linkedin claims:  Node.js being up to 20x faster than Rails for certain scenarios
  • #26 Options for moving operations off (child process, web workers)
  • #33 Mention features also coming in v 0.12