MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE...
Transcript of MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE...
![Page 1: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/1.jpg)
@prpatel
MOdern Java(Script) Server Stack
Pratik Patel @prpatel
![Page 2: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/2.jpg)
@prpatel
Pratik Patel @prpatel
CTO Triplingo
JAVA CHAMPION PRESIDENT ATLANTA JUG
![Page 3: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/3.jpg)
POLYGLOT
![Page 4: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/4.jpg)
TURTLE
MY FIRST PROGRAM
apple mac vintage 5" screen
![Page 5: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/5.jpg)
TURING
MY FIRST REAL PROGRAM
![Page 6: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/6.jpg)
JAVASCRIPT
RUBY ANDROID
JAVA GROOVY
IOS
![Page 7: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/7.jpg)
@prpatel
MANY HATS
![Page 8: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/8.jpg)
@prpatel
java STACK
![Page 9: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/9.jpg)
@prpatel
java THREAD MODEL
![Page 10: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/10.jpg)
@prpatel
JAVASCRIPT
![Page 11: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/11.jpg)
@prpatel
WHY?
ECOSYSTEM
TOOLS
![Page 12: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/12.jpg)
@prpatel
Yesterday’s Javascript
![Page 13: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/13.jpg)
@prpatel
TODAY’s Javascript
![Page 14: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/14.jpg)
@prpatel
WHAT’s CHANGED?
![Page 15: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/15.jpg)
@prpatelNO CHANGE (UNTIL RECENTLY)!
JS IS the same Language it was 20 years ago
![Page 16: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/16.jpg)
@prpatelWe’ve changed
best practices
TOOLING
MUCH BETTER RUNTIMES
![Page 17: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/17.jpg)
@prpatelWHAT HASN’T CHANGED
JS Still has BAD PARTS
ASYNC, EVENT-DRIVEN
EVERY BROWSER SUPPORT
![Page 18: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/18.jpg)
@prpatel
JS OUTSIDE THE BROWSER?
![Page 19: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/19.jpg)
@prpatelV8
Super fast JS runtime
included in chrome
RUNS on CLI/server
![Page 20: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/20.jpg)
@prpatel
NODE.js
![Page 21: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/21.jpg)
@prpatelWHAT ABOUT THE JVM?
BUILT INTO JVM FOR YEARS
rhino (current)
Nashorn (next gen)
![Page 22: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/22.jpg)
@prpatel
WHY JAVASCRIPT ON THE SERVER?
![Page 23: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/23.jpg)
@prpatelWHY JS?
SINGLE LANG FOR BROWSER & SERVERFAST
SCALABLE
![Page 24: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/24.jpg)
@prpatel
ISOMORPHIC APPS
![Page 25: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/25.jpg)
@prpatelisomorphic apps
code can run either on browser or server!
![Page 26: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/26.jpg)
@prpatel
“Traditional” Webapp
![Page 27: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/27.jpg)
@prpatel
Isomorphic
![Page 28: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/28.jpg)
@prpatelwhy isomorphic?
flexibility
performance
![Page 29: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/29.jpg)
@prpatel
WHY DO WE CARE ABOUT
NODE.JS?
![Page 30: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/30.jpg)
@prpatelWHY node?
Bevy of tools for webdev
ISOMORPHIC APPS
SCALABLE SOLUTIONS
![Page 31: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/31.jpg)
@prpatelWHY node?
SOURCE CODE QUALITY
BUNDLING / development
server-side JS
![Page 32: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/32.jpg)
@prpatelmodules
express, grunt, gulp, webpack, jasmine, BROWSERSYNC, etc
![Page 33: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/33.jpg)
@prpatelSCALABLE
![Page 34: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/34.jpg)
@prpatelNOT SCALABLE
![Page 35: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/35.jpg)
@prpatelSCALABLE
![Page 36: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/36.jpg)
PERFORMANCE NUMBERS
![Page 37: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/37.jpg)
@prpatelNODE VS JAVA WEB REQS
NODE - ~10k REQ / second
WHAT ABOUT JAVA?
![Page 38: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/38.jpg)
VERT.X
![Page 39: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/39.jpg)
RXJAVA
![Page 40: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/40.jpg)
@prpatelBusiness Logic / API Layer
ARCHITECTURE
Java Ruby PythonData Store
JavaScript
Presentation
Web Mobile Bots
![Page 41: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/41.jpg)
@prpatel
ECOSYSTEM
![Page 42: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/42.jpg)
@prpatelecosystem
NODE.JS
NPM
LOTS OF MODULES
![Page 43: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/43.jpg)
@prpatelNODE.js
javascript runtime based on v8
![Page 44: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/44.jpg)
@prpatelnpm
node package manager
![Page 45: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/45.jpg)
@prpatelmodules
express, grunt, gulp, webpack, jasmine, etc
![Page 46: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/46.jpg)
@prpatel
NODE.JS
![Page 48: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/48.jpg)
@prpatelnode.js
run from command-line
![Page 49: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/49.jpg)
@prpatel
$nodetest3.jsHelloBangalore!
———-test3.js:console.log('HelloBangalore!')
NODE.JS
![Page 50: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/50.jpg)
@prpatel
//describesthisnodeproject,placeinbasefolder{"name":"hello-world","descripEon":"helloworldtestapp","version":"0.0.1","private":true,"dependencies":{"express":"3.x"}}
PACKAGE.JSON
![Page 51: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/51.jpg)
@prpatel
NPM
![Page 52: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/52.jpg)
@prpatelNPM
BASIC PKG MANAGEMENT
COMES WITH NODE.JS
![Page 53: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/53.jpg)
@prpatelNPM
127,000 300k PACKAGES in
the NPM REPO
![Page 54: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/54.jpg)
@prpatel
WHAT’s CHANGED?
![Page 55: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/55.jpg)
@prpatel
$npmls$npminstalllodash-g
NPM
![Page 56: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/56.jpg)
@prpatel
EXPRESS
![Page 57: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/57.jpg)
@prpatelEXPRESS
Basic server-side web framework
lots of other options: sails, KOA, Geddy, etc
![Page 58: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/58.jpg)
@prpatelexpress
EVENT-LOOP model
ASYNC, event-driven
super scalable
![Page 59: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/59.jpg)
@prpatel
$cathello-world/package.json{"name":"hello-world","descripEon":"helloworldtestapp","version":"0.0.1","private":true,"dependencies":{"express":"3.x"}}$npminstall$npmappExpressserverlisteningonport3000
EXPRESS
![Page 60: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/60.jpg)
@prpatel
NODE.JS
DIFFERENT UNIVERSE THAN WHAT YOU ARE USED TO
![Page 61: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/61.jpg)
@prpatelServer-SIDE JS
ASSEMBLE YOUR OWN framework
SMALLER MODULES
![Page 62: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/62.jpg)
@prpatelServer-SIDE JS
NO “ONE-WAY” to do things
OVERLAPPING TOOLS
![Page 63: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/63.jpg)
@prpatel
TOOLS
![Page 64: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/64.jpg)
@prpatel
SOCKET.IO
![Page 65: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/65.jpg)
@prpatelSOCKET.IO
WEBSOCKET
![Page 66: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/66.jpg)
@prpatelSOCKET.IO
Persistent connection
NODE handles it well
simple on front& back
![Page 67: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/67.jpg)
@prpatel
io.emit('announce',{announcement:announcement});
SERVER
![Page 68: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/68.jpg)
@prpatel
socket.on('announce',funcEon(data){self.data.announcement=data;self.displayNewData();});
BROWSER
![Page 69: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/69.jpg)
@prpatelHTTP2 SPEC
WEBSOCKET IS INCLUDED!
![Page 70: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/70.jpg)
@prpatelBusiness Logic / API Layer
ARCHITECTURE
Java Ruby PythonData Store
JavaScript
Presentation
Web Mobile Bots
![Page 71: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/71.jpg)
@prpatelCLOSING THOUGHTS
NOT FOR EVERY KIND OF APP
ASYNC, EVENT-DRIVEN
still maturing
![Page 72: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/72.jpg)
@prpatel
Javascript Fatigue
![Page 73: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/73.jpg)
@prpatelServer-SIDE JS
can be tied into existing build process
can use existing db & other infra
![Page 74: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/74.jpg)
@prpatel
References:hTp://gulpjs.com/hTps://github.com/kriasoU/react-starter-kithTp://webpack.github.io/
hTps://twiTer.com/sstephenson/status/730039913052176384
![Page 75: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/75.jpg)
@prpatel
THANK YOU
![Page 76: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/76.jpg)
@prpatel
java STACK
![Page 77: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/77.jpg)
@prpatel
QUICK WALK-THROUGH
![Page 78: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/78.jpg)
@prpatel
GRUNT
![Page 79: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/79.jpg)
@prpatelGRUNT
TASK BASED COMMAND-LINE TOOL
![Page 80: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/80.jpg)
@prpatelUSES
JavaSCript linting
Unit test running
minification
![Page 81: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/81.jpg)
@prpatel
"devDependencies":{"grunt":"~0.4.2","grunt-contrib-jshint":"~0.6.3","grunt-contrib-nodeunit":"~0.2.0","grunt-contrib-uglify":"~0.2.2"}
PACKAGE.JSON
![Page 82: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/82.jpg)
@prpatel
module.exports=funcEon(grunt){grunt.initConfig({jshint:{all:['Grunbile.js',‘lib/**/*.js','test/**/*.js','public/**/*.js','routes/*.js','routes/**/*.js','app.js']}});grunt.loadNpmTasks('grunt-contrib-jshint');grunt.registerTask('default',['jshint']);};
//TesEngJasmine
GRUNTFILE
![Page 83: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/83.jpg)
@prpatel
$ gruntRunning "jshint:all" (jshint) taskLinting app.js ...ERROR[L12:C20] W033: Missing semicolon.var app = express()
Warning: Task "jshint:all" failed. Use --force to continue.
Aborted due to warnings.
RUNNING
![Page 84: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/84.jpg)
@prpatel
TOOLS GALORE
PACKAGING, TESTING, ETC
![Page 85: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/85.jpg)
@prpatelTOOLBOX
GULP
WEbpack
SOCKET.IO
![Page 86: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/86.jpg)
@prpatel
GULP
![Page 87: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/87.jpg)
@prpatelGULP
Streaming build tool
![Page 88: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/88.jpg)
@prpatelUSES
Plugin based
streaming
successor to grunt (?)
![Page 89: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/89.jpg)
@prpatel
gulp.task('build',['clean'],funcEon(cb){runSequence(['vendor','assets','styles','bundle'],cb);});
GULPFILE
![Page 90: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/90.jpg)
@prpatel
gulp.task('assets',funcEon(){src.assets=['src/assets/**','src/content*/**/*.*','src/templates*/**/*.*'];returngulp.src(src.assets).pipe($.changed('build')).pipe(gulp.dest('build')).pipe($.size({Etle:'assets'}));});
GULPFILE
![Page 91: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/91.jpg)
@prpatel
gulp.task('bundle',funcEon(cb){varstarted=false;varconfig=require('./webpack.config.js');varbundler=webpack(config);…}
GULPFILE
![Page 92: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/92.jpg)
@prpatel
References:hTp://gulpjs.com/hTps://github.com/kriasoU/react-starter-kit
![Page 93: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/93.jpg)
@prpatel
WEBPACK
![Page 94: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/94.jpg)
@prpatelWEBPACK
Module builder
![Page 95: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/95.jpg)
@prpatelwebpack
suited for large projects
CODE SPLITTING
STATIC ASSETS
![Page 96: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/96.jpg)
@prpatelWEBPACK
![Page 97: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/97.jpg)
@prpatelWEBPACK
BROWSER SYNC & LIVE updates
![Page 98: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/98.jpg)
@prpatel
devServer:{historyApiFallback:true,hot:false,inline:true,progress:false,noInfo:false,proxy:{'/lunches':{target:'hTp://connect-js.com:3000/',secure:false,}}}
LIVE RELOAD
![Page 99: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,](https://reader036.fdocuments.us/reader036/viewer/2022062505/5ec56862668468537156f3d8/html5/thumbnails/99.jpg)
@prpatel
$gulppagespeed[15:48:49]Usinggulpfile~/dev/react/react-starter-kit/gulpfile.js[15:48:49]StarEng‘pagespeed'...
CSSsize|148.13kBHTMLsize|20.84kBImagesize|54.24kBJavaScriptsize|1.72MB
PAGESPEED