Upload
ansuman-roy
View
88
Download
0
Embed Size (px)
Citation preview
Ansuman Roy
Agenda Introduction History Why Node.js Community Features FAQ Few Awesome
Modules! Conclusion
get ready to node, this session is hands on!
IntroductionIt’s NOT a web framework, and it’s also NOT a
languageOpen 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 v8Rest of it in javascript Swiss army knife for network Related stuffsCan handle thousands of Concurrent connections
with Minimal overhead (cpu/memory) on a single process
Licence MIT Last release : v7.2.1385,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 JSJS on server and client
allows for more code reuseA lite stack (quick create-
test cycle)1 Language for Frontend
and BackendLarge number of offerings
for web app creationActive community
Build Fast!
Why Node?Fast V8 EngineSingle Thread with
Event LoopGreat I/O
performance with event loop!
Small number of layers
Horizontal Scaling
Run Fast!
Why Node?JS across stack allows
easier refactoringSmaller codebaseCross
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 has stifled innovation.” - Joe McCann CEO NodeSource
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
Running Node Apps
Hands On #1 – ‘Welcome Noder!’
Node Globalsprocess – 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
ModulesModules 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’)
ModulesWe 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
Modulesbar.js
module.exports = ‘I am a string’
foo.js
var msg = require(‘./bar.js’)
console.log(msg) // prints ‘I am a string’
Modulesbar.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
V8Thread
Pool(libeio)
Event Loop
(libev)
Node Bindings (socket, http, etc.)
Node Standard Library
C
C++
JavaScript
Node ArchitectureNode handles requests with a single thread
(the event loop)!
Node ArchitectureHow 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’
NPMModules can be shared by packagingNode 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
NPMFirst, we need to create a package.json file
for our appContains metadata for our app and lists the
dependenciesPackage.json Interactive Guide
NPMCommon 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
NPMSemVar 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