Wednesday, April 21, 2010

Server Side JavaScript is very real

At the super awesome JSConf 2010 in Washington DC last weekend Ryan Dahl, the brilliant creator of the server side JavaScript platform node.js, that will eventually rule the world, made a remark on the "CommonJS panel discussion" that some people thought was not completely correct: "Server side JS is pretty much only used for toy demos" (quoting from blurry memory). I think he was actually trying to make a different point, but people still asked me to write about my own experience.

I must be one of the lucky few who is actually paid for making large scale web apps based on server side JavaScript (yes you are allowed to write me emails how envious you are).

Our last project was mirapodo. They are a very-real, zappos-like shoe store startup in Germany backed by the 2nd largest ecommerce retailer in the world. I can't really go into numbers but it is serving millions of page impressions per short time frame :)

The system runs on Rhino, which was pretty much the only real option to do SSJS when we started last summer. I don't want to go too deep into the technical details of the backend systems. All I can say is that we had a blast doing it and that we are going to do it again (This time for Gucci).


Since the site is currently German-only I made some green highlights on were it makes sense to click on the site to see it in action. Also make sure to scroll down with endless scrolling, then pick a product and then go back via the back button. The HTML from the endless scrolling is stored in HTML5 local storage and then completely restored without a single AJAX request :)

We try to share as much code between client and server as possible. This is were server side JS for websites really shines. For once we are dogfooding Joose on both sides and probably the coolest example is this Facebook connect app: It is using the official Facebook API for the client side on the server side. (Yes that is why it is so slow :)

BTW: Thanks to SinnerSchrader for letting me do this.