"The right way of coding nodejs applications" prompts me to post some benchmarks I was playing with a few days ago to answer this very question.
My benchmarks looked at the performance of using closures for asynchronous flow control, where you are creating closures with each function call. A common model for flow control is to use closures. Here is an example from the delightful little `Step` library by Tim Caswell. Step( function readSelf() { fs.readFile(__filename, this); }, function capitalize(err, text) { if (err) throw err; return text.toUpperCase(); }, function showIt(err, newText) { if (err) throw err; console.log(newText); } ); I wanted to see how the creation of closures at function invocation would compare to the use of an object, where the steps would be object member functions and state would be preserved in `this`. Maybe creating an object would be faster since the member functions are already created, they only need to be assigned. I created a JSPerf that tested closures versus prototypes for this use case. http://jsperf.com/flow-control/3 The tests are not asynchronous. I only want to test the cost of creating the closures versus creating the object and fussing with `this`. Each function sums an array after after first popping the last element. The pop is one step. The sum is another. There is no external flow control. The popper function calls the sum function when it is done. Looks like the prototype method might be slightly faster, but not fast enough to make me want to explore using object member functions for flow control when closures are familiar and easy to read. Rough Edges I did find an interesting case where if you assign a method to an object member, as you might do during object creation, performance drops dramatically. This can be seen in "Closure assigned to object property" and "Closure assigned to object property, not called". However, you can make the problem go away if you assign the function to a variable, then assign the property using the function name. This can be seen in "Closure assigned to object property via variable". Also, performance in Firefox 13 is a different story. Using an object to model flow is all kinds of faster. Conclusions Maybe closures are a work in progress with a few gotchas, but it's probably not worth my time to create a convoluted new async pattern to second-guess V8. -- Alan Gutierrez - http://twitter.com/bigeasy - http://github.com/bigeasy -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to nodejs@googlegroups.com To unsubscribe from this group, send email to nodejs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en