Node.js has been gaining steam over the last little while, thanks to videos like this, showing how Node.js can handle 1000 concurrent requests. The development community has grown by leaps and bounds and new packages are constantly being added to NPM. In addition to this, Microsoft has thrown its weight behind it and has provided support for Node.js development in Windows Azure and their WebMatrix IDE. The selling features sound pretty good compared to existing frameworks and architectures:
Not only is this hard to read, it's not clear why all of these layers of callbacks are even necessary. This could just be this one library, however, it also seems that Node.js is solving a problem that isn't there for a vast majority of people. The Railways.js and Express frameworks are great, however, if the problem you are trying to solve is concurrency, you are unlikely to use a heavyweight framework. You are much more likely to build a highly specialized and tuned end point, using low level platform constructs.
That is not to say that it's a lost cause. Projects like TypeScript are seeking to make Node.js development much more scalable. Tools like Jetbrains WebStorm with the Node.js plugin, provide a slew of functionality for JavaScript development that you may be used to in other development environments. This includes refactoring, code completion, a nodeunit test runner, and debugging
Would I use Node.js on my next project? Potentially for small endpoints that may need high concurrency and throughput. However, I am interested in seeing where the development community takes the concept of JavaScript on the server. Perhaps at some point this will become a viable alternative to the existing platforms and frameworks.
- Better memory efficiency under high loads compared to traditional thread based concurrency model
- No locks and as a result no dead locks
- HTTP is a first class protocol, this means it's a good foundation for web libraries and frameworks
- Developers can write code in one language on the client and server
In order to jump right in and start learning Node.js I decided to write an adapter for the jugglingdb ORM. This is an ORM which is bundled in the very Ruby on Rails like framework Railway.js. The adapter was written to integrate into Windows Azure Table Storage and is available in github and on npm.
From this experience I've learned several things, the most important of which is that Node.js is not ready for primetime. While it's great for doing simple endpoints, complex applications seem to be very hard to troubleshoot and debug. This is due to the use of async callbacks all over the place. While this allows high concurrency, debugging becomes a muddled mess. Here is an example of the getTable function in the TableService class, provided by Microsoft.
TableService.prototype.getTable = function (table, optionsOrCallback, callback) { var options = null; if (typeof optionsOrCallback === 'function' && !callback) { callback = optionsOrCallback; } else { options = optionsOrCallback; } validateTableName(table); validateCallback(callback); var webResource = WebResource.get("Tables('" + table + "')"); webResource.addOptionalHeader(HeaderConstants.CONTENT_TYPE, 'application/atom+xml;charset="utf-8"'); webResource.addOptionalHeader(HeaderConstants.CONTENT_LENGTH, 0); var processResponseCallback = function (responseObject, next) { responseObject.tableResponse = null; if (!responseObject.error) { responseObject.tableResponse = TableResult.parse(responseObject.response.body); } var finalCallback = function (returnObject) { callback(returnObject.error, returnObject.tableResponse, returnObject.response); }; next(responseObject, finalCallback); }; this._performRequestExtended(webResource, null, options, processResponseCallback); };
Not only is this hard to read, it's not clear why all of these layers of callbacks are even necessary. This could just be this one library, however, it also seems that Node.js is solving a problem that isn't there for a vast majority of people. The Railways.js and Express frameworks are great, however, if the problem you are trying to solve is concurrency, you are unlikely to use a heavyweight framework. You are much more likely to build a highly specialized and tuned end point, using low level platform constructs.
That is not to say that it's a lost cause. Projects like TypeScript are seeking to make Node.js development much more scalable. Tools like Jetbrains WebStorm with the Node.js plugin, provide a slew of functionality for JavaScript development that you may be used to in other development environments. This includes refactoring, code completion, a nodeunit test runner, and debugging
Would I use Node.js on my next project? Potentially for small endpoints that may need high concurrency and throughput. However, I am interested in seeing where the development community takes the concept of JavaScript on the server. Perhaps at some point this will become a viable alternative to the existing platforms and frameworks.
Thank You Very Much, very enlightening.
ReplyDeleteWeb Hosting in Faisalabad
Awesome article bro. Very helpful. Thank you very much :).
ReplyDeleteWeb development Chicago
Website design company Chicago
wordpress website builder chicago
web development company in chicago
ReplyDeleteThe blog is absolutely fantastic. Lots of great information and inspiration, both of which we all need.Thanks once more for all the details.
Read More: Web Development Services Company
Web Designing Services Company
Your site always offer some really interesting information. Thank you for sharing it with us.
ReplyDeleteappvn app
Splitwise app
Thank you for sharing this kind of valuable information with us Top Web Design Company in Bangalore | Website Developers in Bangalore | Website Designing Company in Bangalore
ReplyDeleteThis was a great and interesting article to read. oral sex
ReplyDeleteThanks for the blog loaded with so many information. Stopping by your blog helped me to get what I was looking for. Webdesign bureau
ReplyDeleteThank you again for all the knowledge you distribute,Good post. I was very interested in the article, it's quite inspiring I should admit. I like visiting you site since I always come across interesting articles like this one.Great Job, I greatly appreciate that.Do Keep sharing! Regards, freelance web designer peter
ReplyDeleteThank you very much, this is what i was looking for. Very nice of you! Gent | Amsterdam | Luxembourg | Moscow
ReplyDeleteExcellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking. Best price
ReplyDeleteThank you for this post! luchthavenvervoer luchthavenvervoer-kevin.be
ReplyDelete