Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Philly Tech Week Introduction to NodeJS

231 views

Published on

These are the slides from the sold out Philly Tech Week Introduction to NodeJS workshop run by Ross Kukulinski, a product manager at NodeSource.

In this tutorial, we will provide a brief overview of NodeJS, including its strengths and weaknesses, best practices, and package management. After the introduction, attendees will have the remainder of the tutorial to learn NodeJS through hands-on NodeSchool.io exercises with assistance from a team of mentors.

NodeSchool.io is a series of choose-your-own-adventure style workshops that teach people how to use NodeJS, NPM, and other related tools by writing code to solve realistic problems. NodeSchool is entirely community driven and is 100% open source, which means you can take the exercises home and continue to learn!

Published in: Technology

Philly Tech Week Introduction to NodeJS

  1. 1. May 4, 2016 #PTW16 Intro to Node.JS Ross Kukulinski
  2. 2. © 2016 Ross Kukulinski2 @RossKukulinski Product Manager — NodeSource Node Foundation Evangelist Container Advocate & Consultant Introduction to CoreOS - O’Reilly Media
  3. 3. © 2016 Ross Kukulinski Overview 3 phillydev.org #ptw-nodejs-workshop
  4. 4. © 2016 Ross Kukulinski Overview 4 Why are you here?
  5. 5. © 2016 Ross Kukulinski Overview 5 Workshop Goals • Learn what Node.JS is and is not • Understand non-blocking I/O and event-driven programming • Hands on with Node.JS! • Prepare you for future Node.JS learning
  6. 6. © 2016 Ross Kukulinski Overview 6 Schedule • 9:00 - 9:05 — Intro & Overview • 9:05 - 9:45 — What is Node.JS • 9:45 - 10:00 — Hands-on with NodeJS • 10:00 - 10:30 — NodeSchool Pair-Programming • 10:30 - 10:45 — Coffee Refill • 10:45 - 11:00 — Questions / Review • 11:00 - 11:45 — Continued Pair-Programming • 11:45 - 12:00 — Wrap up & Summary
  7. 7. © 2016 Ross Kukulinski What is Node.JS 7
  8. 8. © 2016 Ross Kukulinski8
  9. 9. © 2016 Ross Kukulinski What is Node.JS 9 Node.JS is a JavaScript runtime built on Chrome’s JavaScript engine* for building fast, scalable network applications.
  10. 10. © 2016 Ross Kukulinski Node.JS is NOT 10 … a language … a web framework
  11. 11. © 2016 Ross Kukulinski What is Node.JS 11 Node by the Numbers • Node.JS is the fastest growing development platform • 3.5 million users and annual growth rate of 100% • npm is the largest ecosystem of open source libraries in the world https://nodejs.org/static/documents/2016-survey-report.pdf
  12. 12. © 2016 Ross Kukulinski What is Node.JS 12 Enterprises have already adopted Node.js
  13. 13. © 2016 Ross Kukulinski Why does Node.JS exist? 13
  14. 14. © 2016 Ross Kukulinski Why does Node.JS Exist? 14 Latency: Memory vs I/O L1 cache 0.5ns L2 cache 7ns Main memory 100ns Send 1K bytes over 1 Gbps network 10,000ns Round trip within same datacenter 500,000ns Disk seek 10,000,000ns Packet CA->Netherlands->CA 150,000,000ns https://gist.github.com/jhclark/2845836
  15. 15. © 2016 Ross Kukulinski15 I/O is Expensive Why does Node.JS Exist?
  16. 16. © 2016 Ross Kukulinski16 console.log('Fetching article...'); var result = query("SELECT * FROM articles WHERE id = 1"); console.log('Here is the result:', result); Blocking I/O Blocking vs Non-Blocking
  17. 17. © 2016 Ross Kukulinski17 1 // Java: Spot the I/O 2 3 System.out.println("Reading file..."); 4 BufferedReader br = new BufferedReader(new 5 FileReader("in.txt")); 6 7 try { 8 StringBuilder sb = new StringBuilder(); 9 String line; 10 11 while ((line = br.readLine()) != null) 12 sb.append(line + "n"); 13 System.out.print(sb.toString()); 14 } finally { 15 br.close(); 16 } 17 18 System.out.println("Finished reading file!");
  18. 18. © 2016 Ross Kukulinski18 Some solutions • One process per connection (Apache Web Server 1) • One thread per connection (Apache Web Server 2) • Event-Driven (nginx, node.js) Blocking vs Non-Blocking
  19. 19. © 2016 Ross Kukulinski Event-Driven, Non-Blocking Programming 19 function handleResult(result) { console.log('Here is the result:', result); } select('SELECT * FROM articles WHERE id = 1', handleResult); console.log('Fetching article...');
  20. 20. © 2016 Ross Kukulinski Why JavaScript? 20 JavaScript well-suited to event-driven model
  21. 21. © 2016 Ross Kukulinski Functions are First-Class Objects 21 Treat functions like any other object • Pass them as arguments • Return them from functions • Store them as variables for later use
  22. 22. © 2016 Ross Kukulinski Functions are Closures 22 function calculateSum (list) { var sum = 0; function addItem(item) { sum += item; } list.forEach(addItem); console.log('sum: ' + sum); } calculateSum([ 2, 5, 10, 42, 67, 78, 89, 120 ]);
  23. 23. © 2016 Ross Kukulinski Functions are Closures 23 function calculateSum (list) { var sum = 0; function addItem(item) { sum += item; } list.forEach(addItem); return function() { // return a function that can print the result console.log('sum: ' + sum); } } var printSum = calculateSum([ 2, 5, 10, 42, 67, 78, 89, 120 ]); // printSum is a function returned by calculateSum but it still // has access to the scope within its parent function printSum();
  24. 24. © 2016 Ross Kukulinski Node.JS Non-Blocking I/O 24 • Kernel-level non-blocking socket I/O using epoll() or select() system calls (depending on the operating system) • File system I/O delegated to worker threads • Glued together with an “event loop”
  25. 25. © 2016 Ross Kukulinski Node.JS Event Loop 25 • Perform work triggered by JavaScript code • Perform work triggered by external events • Pass events & data to JavaScript via callback functions • Exit when no more pending work or events
  26. 26. © 2016 Ross Kukulinski Node.JS Event Loop 26 When does it stop? // 1. fs.readFile('bigdata.txt', 'utf8', function (err, data) { console.log(data.split('n').length, 'lines of data'); });
  27. 27. © 2016 Ross Kukulinski Node.JS Event Loop 27 When does it stop? // 2. setTimeout(function () { console.log('Waited 10s'); }, 10000);
  28. 28. © 2016 Ross Kukulinski Node.JS Event Loop 28 When does it stop? // 3. var i = 0; var timer = setInterval(function () { console.log('tick', i); if (++i === 60) clearInterval(timer); }, 1000);
  29. 29. © 2016 Ross Kukulinski Blocking the event loop 29 // some Monte Carlo madness // estimating π by plotting *many* random points on a plane var points = 100000000; var inside = 0; for (var i = 0; i < points; i++) { if (Math.pow(Math.random(), 2) + Math.pow(Math.random(), 2) <= 1) inside++; } // the event loop is blocked until the calculations are done console.log(‘π ≈ ’, (inside / points) * 4);
  30. 30. © 2016 Ross Kukulinski Sync vs Async 30 var bigdata = fs.readFileSync('bigdata', 'utf8'); fs.readFile('bigdata', 'utf8', function (err, bigdata) { // ... }); Synchronous Asynchronous
  31. 31. © 2016 Ross Kukulinski Node.JS Summary 31 Rules of Thumb • Choose asynchronous I/O over synchronous I/O • Opt for parallel I/O wherever possible • Don’t hog the JavaScript thread with long-running calculations or iterations
  32. 32. © 2016 Ross Kukulinski Node.JS Summary 32 Node.JS is Minimal • Complexity is in user-land • Instead of a big framework, Node.JS provides minimal viable library for doing I/O • All the rest is built on top in user-land • Pick and choose from HUGE library of third-party modules
  33. 33. © 2016 Ross Kukulinski npm - Node Package Manger 33 https://www.npmjs.com/ 250,000+ packages of reusable code
  34. 34. © 2016 Ross Kukulinski Node.JS Strengths 34 Node is great for: • REST APIs • Mobile Backend • Real-time applications • Streaming services • Prototyping • Front-end development
  35. 35. © 2016 Ross Kukulinski Node.JS Weaknesses 35 Node is NOT good for: • CPU-bound workloads • Serving static content
  36. 36. © 2016 Ross Kukulinski Hands-on with Node.JS 36
  37. 37. © 2016 Ross Kukulinski Installing Node.JS 37 https://nodejs.org/en/download/ https://github.com/creationix/nvm OSX/Linux Windows
  38. 38. © 2016 Ross Kukulinski38 What do you get? • node — The Node.JS runtime binary • npm — CLI tool allows you to use the extensive module ecosystem Installing Node.JS
  39. 39. © 2016 Ross Kukulinski Example Code 39 github.com/rosskukulinski/ptw16_node
  40. 40. © 2016 Ross Kukulinski Hands-on with NodeJS 40 Live demo time!
  41. 41. © 2016 Ross Kukulinski NodeSchool Pair-Programming 41
  42. 42. © 2016 Ross Kukulinski NodeSchool.io 42 Workshoppers Open source lesson modules to teach JavaScript, Node.JS, npm, and many more topics. All lessons are self-guided and most work offline.
  43. 43. © 2016 Ross Kukulinski43 Find a Partner! NodeSchool.io
  44. 44. © 2016 Ross Kukulinski learnyounode 44 Getting started 1. npm install -g learnyounode 2. Make a folder to store your code 3. learnyounode
  45. 45. © 2016 Ross Kukulinski learnyounode 45 Let’s work through the first exercise together
  46. 46. © 2016 Ross Kukulinski Break time! Back at 10:45 46
  47. 47. © 2016 Ross Kukulinski Questions / Review 47
  48. 48. © 2016 Ross Kukulinski Back to it! 48
  49. 49. © 2016 Ross Kukulinski Wrap Up 49
  50. 50. © 2016 Ross Kukulinski Wrap Up 50 Resources for future learning • http://nodeschool.io • https://nodejs.org/api/ • https://github.com/nodejs/help • #node.js on irc.freenode.net • http://nodeweekly.com/ • http://planetnodejs.com/ • http://nodeup.com/ • http://stackoverflow.com/questions/tagged/node.js • http://www.meetup.com/nodejs-philly/
  51. 51. © 2016 Ross Kukulinski Wrap Up 51 Package recommendations • Logging: Bunyan, winston • Webserver: Express, hapi, kraken • REST APIs: restify, hapi • Testing: mocha, tap, jasmine • Frontend: browserify, gulp, grunt, webpack • Real-time: socket.io, ws Also experiment with functional programming (Node.JS Streams)
  52. 52. © 2016 Ross Kukulinski Wrap Up 52 Want to get involved? • https://nodejs.org/en/get-involved/ • Help with documentation • Contribute to Node Core • Contribute to npm modules • Run your own NodeSchool
  53. 53. © 2016 Ross Kukulinski NodeSource 53 The Enterprise Node Company™ https://nodesource.com
  54. 54. © 2016 Ross Kukulinski NodeSource 54 N|Solid: Enterprise Grade Node • Production Monitoring • Performance Analysis • Platform Security • Free for Development
  55. 55. Thank you. Ross Kukulinski ross@nodesource.com @RossKukulinski

×