12
{Node.JS} Common pitfalls ( The story of small Game Development Project )

Techtalk#6: NodeJs: pitfalls (based on game project)

  • Upload
    da-14

  • View
    267

  • Download
    7

Embed Size (px)

DESCRIPTION

Are you about to start coding backend in NodeJs? So then what should you expect and avoid while doing this? Our answer is - many things, including asynchoronous programming, single thread and global scope. Make sure you understand what these are to have better NodeJs experience and application in the end. Read about this and other techtalks @ DA-14 in our blog: http://da-14.com/our-blog/

Citation preview

Page 1: Techtalk#6: NodeJs: pitfalls (based on game project)

{Node.JS} Common pitfalls ( The story of small Game Development Project )

Page 2: Techtalk#6: NodeJs: pitfalls (based on game project)

Agenda

• Event Loop, Non-Blocking I/O, Async Development • Debugging• Lessons learned, lessons forgotten• Born to Scale (Scalability in mind)• Hey going to production!! Oooops ….

Page 3: Techtalk#6: NodeJs: pitfalls (based on game project)

Event LoopSingle Thread – one global scope

Page 4: Techtalk#6: NodeJs: pitfalls (based on game project)

Async Development – Burn in Hell

Page 5: Techtalk#6: NodeJs: pitfalls (based on game project)

Async Development – Callback Hell ResolvingGive the names to your callbacks

Page 6: Techtalk#6: NodeJs: pitfalls (based on game project)

Async Development – Callback Hell ResolvingDivide your structure to small functions

Page 7: Techtalk#6: NodeJs: pitfalls (based on game project)

Async Development – Callback Hell ResolvingPromises

Page 8: Techtalk#6: NodeJs: pitfalls (based on game project)

Debugging

WebStorm IDE Debugger›Node-Inspector module

Page 9: Techtalk#6: NodeJs: pitfalls (based on game project)

Lessons learned, lessons forgotten (Development Phase)

• Choose framework you know or used in previous projects• Don't forget to clear the timer once you set it – or the magic will happen in your app• Divide the code to modules and classes – from beginning• Bot is the same as the user – unification for clarity• Don't use multistep CSS3 animation – you will need to have “animation finished” event• Don't start full refactoring – you will loose a time and will through this idea soon• Use class constants instead of magic numbers 0,1,2 …• Put conditions into functions

Page 10: Techtalk#6: NodeJs: pitfalls (based on game project)

Born to Scale (Scalability In mind)

• One way – store application state in cache or db Then put the NodeJs behind the reverse proxy like Nginx• Another way – split socket.io connections across servers + use so called “sticky sessions”

Page 11: Techtalk#6: NodeJs: pitfalls (based on game project)

Hey going to production!! Oooops ….

• Logging – log more, log early• Forget about debugger• Who will up your server when it's down - “Forever”• Exceptions - don't throw them until you catch them• Load Balancing – Nginx as reverse Proxy• One thread – one CPU core – Use cluster module

Page 12: Techtalk#6: NodeJs: pitfalls (based on game project)

Links

http://strongloop.com/strongblog/node-js-callback-hell-promises-generators/http://callbackhell.com/https://github.com/nodejitsu/foreverhttp://nodejs.org/docs/v0.6.0/api/cluster.htmlhttp://blog.keithcirkel.co.uk/load-balancing-node-js/