9 anti-patterns for node.js teams
Upcoming SlideShare
Loading in...5
×
 

9 anti-patterns for node.js teams

on

  • 332 views

9 anti-patterns for teams moving to node.js. Learn from the experience we've had in adopting node.js at PayPal.

9 anti-patterns for teams moving to node.js. Learn from the experience we've had in adopting node.js at PayPal.

Statistics

Views

Total Views
332
Views on SlideShare
319
Embed Views
13

Actions

Likes
1
Downloads
2
Comments
0

1 Embed 13

https://twitter.com 11

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

9 anti-patterns for node.js teams 9 anti-patterns for node.js teams Presentation Transcript

  • 9 anti-patterns for node.js teams Jeff Harrell @juxtajeff
  • Node first went live on paypal.com in 2013. Since: • 35 apps live (marketing, signup, account, payments, etc). • 400 new JavaScript engineers • 500,000 npm installs per day (internally) Made a good deal of mistakes to learn from
  • Anti-pattern #1 Baggage from your previous technology
  • • "Node doesn't support x. It won’t work" • “How do I deal with npm version conflicts?” • “Can’t let the app restart. It takes too long”
  • Leave your baggage behind." ! Except when you’re flying
  • Anti-pattern #2 Monolithic applications
  • • Use an internal npm instance • Publish modules vs. embedding functionality • Don’t overload modules – compose them Prefer different user, credit card and bank modules Avoid a single “shared” module
  • Build with many blocks, not one."
  • Anti-pattern #3 Googling “How to do x in JavaScript”
  • • jQuery results dominate search engines • Understand ES5 • Be aware of what’s coming in ES6
  • Learn JavaScript before diving in." !
  • Anti-pattern #4 Handling errors
  • • Use an Error object, not a string • Throwing is for programmer errors • Restart on uncaught exception vs ignoring it
  • Error cases are hard." ! Make sure to deal with them
  • Anti-pattern #5 Wrapping everything in promises
  • • Use for the right reasons (not throw or waterfall) • Modules should expose callback interfaces • Use promises sparingly in hot code 27% of CPU time spent in promise execution
  • Callbacks." ! Seriously
  • Anti-pattern #6 Git URLs in your package.json
  • • Git URLs don’t fully leverage semver • Weird caching issues • Unstable state (akin to force overwriting in npm)
  • Publish to npm." ! Set it up internally and use it
  • Anti-pattern #7 Sloppy async code
  • • Understand control flow patterns • Don’t create crazy waterfalls Hoist functions Use promises (appropriately) Use async • Callback with code afterwards, but no return if (true) { callback(); } fallback();
  • Use good async patterns." ! Queue funny mis-ordered async sentence
  • Anti-pattern #8 Having node do everything
  • • SSL termination should be done by nginx • Heavy encryption is not for node • Don’t bind directly to port 80/443 “How do I enable gzip?” “How do I add an SSL cert to my app?”
  • Best tool, meet job." !
  • Anti-pattern #9 Ignoring the node ecosystem
  • • npm has a wealth of pre-written code • Get updates from community, e.g. Node Security • Conferences like this
  • Embrace your new community." ! Warning: May contain drama
  • Thanks!" ! Q&A is over drinks later!
  • Photo Credits 1. https://www.flickr.com/photos/11334694@N00/268023465/ 2. https://www.flickr.com/photos/14125773@N00/14205159881/ 3. https://www.flickr.com/photos/60364452@N00/3921008904/ 4. https://www.flickr.com/photos/83099438@N00/5902730038 5. https://www.flickr.com/photos/82402200@N00/523497824/ 6. https://www.flickr.com/photos/48553010@N00/113694992/ 7. https://www.flickr.com/photos/46889122@N03/4304137088/ 8. https://www.flickr.com/photos/39039882@N00/5189290606/ 9. https://www.flickr.com/photos/43145783@N00/1852428153/