I understand that the increasing speeds of SpiderMonkey and V8 (and even Chakra) have turned the web into a place where you can build client-side web apps with much richer functionality. And I understand why that has led us to more and more “single-page” apps that load additional data and render it using on-page templates.
Earlier today, I was checking out the popular article on Hacker News about Ember.js’s Quick Start shortcomings. It was a forum post on the new Discourse platform from the Stack Exchange folks, which was itself built on Ember.js.
Here’s what I saw:
A blank page.
I checked the errors, and it looks like something failed to load.
The irony to me, is when looking at Discourse’s about page:
The state of forums has been unchanged for so long that forums are considered unworkable and undesirable; few sites want forums any more because the software is so poor.
In my book, those old forums worked, as ugly as they were, and working and ugly is better than pretty and not working. All your fancy live-updates, inline editing, etc, simply don’t matter when the content doesn’t load. As has been said a million times before, Content Is King.
I don’t mean to pick on Discourse here. They built what is I’m sure a great product, which is itself built on a great framework by very smart people.
The problem is in the assumption that rich functionality and traditional HTML rendering have to be divorced. That if we want all the fancy rich-client stuff, we can't deliver rendered content to the client, we must render content client-side.
I don’t think that’s true. I think you can build apps that deliver rendered HTML content to the browser, and add rich functionality on top of that, hopefully with appropriate fallbacks for the most important actions.
Doing so provides a number of benefits:
- Faster startup time - “Time to first tweet” is Twitter’s benchmark, and the best way to ace such a benchmark is by delivering rendered HTML to the browser on first page load
- Graceful failure - No blank screens like that I one I got today at discuss.emberjs.com
- Smaller payloads - With Discourse’s
noscripttags, they are delivering both the data and the templates to the user’s browser twice