Robin Ward

eviltrout.com · Personal blog · on HN since 2012

Robin Ward, a Discourse developer, writes about Ember.js, JavaScript apps, search engine indexing and Android performance.

What HN saysHN commenters cite it as a solid source on why Discourse chose Ember, how client-side apps can be indexed, and Ember versus Angular.
38HN people shared it
21linked it in comments
35stories submitted
865story points
3 months agolast shared
2012people per year2026

Most-shared posts

  1. 1
    Ember vs. Angular
    7 people · 16 points · first shared 2013 · discussion on HN
  2. 2
  3. 3
    Why Discourse uses Ember.js
    4 people · 270 points · first shared 2013 · 72 comments on HN
  4. 4
  5. 5
    Ember without Ember Data
    4 people · 44 points · first shared 2013 · 7 comments on HN
  6. 6
    Infinite Scrolling that Works
    4 people · 10 points · first shared 2013 · discussion on HN
  7. 7
    TIS-100: An emulator for a CPU that doesn't exist
    2 people · 80 points · first shared 2015 · 37 comments on HN
  8. 8
    Turbolinks and the Prague Café Effect
    2 people · 29 points · first shared 2013 · 9 comments on HN
  9. 9
    Building the Roottrees Are Dead
    2 people · 4 points · first shared 2025 · discussion on HN
  10. 10
    The value of a thousand little features
    2 people · 4 points · first shared 2017 · discussion on HN
  11. 11
  12. 12
    Building Galley House
    2 people · 2 points · first shared 2026 · discussion on HN
  13. 13
    AngularJS versus Ember
    1 people · 207 points · first shared 2013 · 162 comments on HN
  14. 14
    How our users exploited concurrency and how we fixed it
    1 people · 60 points · first shared 2013 · 39 comments on HN
  15. 15

What HN people wrote when they linked it

robdodson · 2016-03-30
Thanks for the follow up. A lot of good info in there. Btw, I just saw this article from the Discourse team on this same topic and was wondering what your thoughts are https://eviltrout.com/2016/02/25/fixing-android-performance.html
fuddle · 2013-10-07
PhantomJS can be a pain to setup, I think the approach taken by Discourse.org is the best option: http://eviltrout.com/2013/06/19/adding-support-for-search-engines-to-y…
kmfrk · 2013-09-02
It’s a myth that if you use a client side MVC framework that your application’s content cannot be indexed by search engines. In fact, Discourse forums were indexable by Google the day we launched. http://eviltrout.com/2013/06/19/adding-support-for-search-engines-to-y… They are probably a good case to follow, if you want to see what people's experiences with SEO for JS-based services are.
kanja · 2013-08-30
Because it doesn't - here's a great article examining the scope of the two. http://eviltrout.com/2013/06/15/ember-vs-angular.html It's great to make the decision to focus on simplicity over scope - that's a good, defensible choice and I don't think anyone here will fault you for it. But an honest understanding of the extra features you gave up to make that choice will go a long way.
rxcfc · 2013-02-16
This is a great post on why one project chose Ember: http://eviltrout.com/2013/02/10/why-discourse-uses-emberjs.html
ldjb · 2016-04-17
There are probably things the web developer can do to minimise memory consumption, though there isn't an obvious solution. That said, the problem of losing your reading position can be solved using something like history.replaceState(). As the user scrolls, update the history entry with a reference to the current reading location. Then, when the browser restarts, the website can know where the user was previously at and can return them to that location. This is the approach Discourse uses [1]. Alternatively, I suppose cookies could be used, but that's a slightly messier solution, imo. Unfortunately, I haven't seen many websites adopt such a feature. Which is a shame because infinite scroll can make for a great user experience -- if done right. But too many websites actually suffer as a result of poorly implemented infinite scroll. [1] https://eviltrout.com/2013/02/16/infinite-scrolling-that-works.html
EvilTrout · 2014-04-09
All these problems are solvable. I co-founded Discourse (http://discourse.org) which uses infinite scrolling heavily. Discourse is also 100% open source so you can see how we did it. My responses below: > Users will lose the page length orientation - the browser scrollbar become useless. We have a fixed "x/y" posts widget at the bottom with a progress bar. > There’s no ability to jump to the end of the list. The aforementioned widget has an up arrow and down arrow to jump to the top/bottom. > Your users will not be able to get back to the same in-page position in 1 click. We use replaceState to update the URL as they scroll. The back button works fine, and you can link to any position in the topic. > There’s no visible footer until your users come to the end of the list/content. Isn't this true of all sites where the user scrolls anything? I guess the difference is you see it more often with pagination. We instead have a fixed header with navigation options and extra details. > Slow Experience - You are using a lot of browser memory as the page scrolls down. We unload posts that have scrolled off the screen. We released a library for it too - http://eviltrout.com/2014/01/04/hiding-offscreen-ember.html > If you switch away from the page by following a link there's no way of getting back to where you left off. The back button works fine thanks to replaceState! > Lack of sense of completion- no closure for users. The progress bar and constantly increasing numbers…
codygman · 2013-02-16
I have limited experience with javascript and MVMM's and cannot answer all the questions, but here is what I do know: Which is best overall? Not enough experience with ember.js to comment. Common gotchas for angular: It's a very different approach when compared to using jquery for everything. The documentation can seem a bit daunting at first, as described in the popular post about why discourse chose ember.js. "The documentation was simple to understand Here’s some text right out of the Angular.JS guides, about a feature called Transclusion. 'The advantage of transclusion is that the linking function receives a transclusion function which is pre-bound to the correct scope. In a typical setup the widget creates an isolate scope, but the transclusion is not a child, but a sibling of the isolate scope. This makes it possible for the widget to have private state, and the transclusion to be bound to the parent (pre-isolate) scope.'" - http://eviltrout.com/2013/02/10/why-discourse-uses-emberjs.html A lot of these problems are solved by the excellent tutorial videos at http://www.egghead.io though. I have no affiliation to the site, but it has made a ton of things about angular more clear for me. Hope this helps!
notriddle · 2018-09-05
https://discourse.org/ is one of the only OSS ones I can think of that's really good, and they've been doing this kind of thing: https://eviltrout.com/2016/02/25/fixing-android-performance.html So... yeah. Getting acceptable performance with a complex SPA is hard.
parroquiano · 2017-03-24
Ember has bad performance on Android[0]. The Discourse team had to write their own Virtual DOM renderer to work around this[1]. [0] https://discuss.emberjs.com/t/why-is-ember-3x-5x-slower-on-android/657… [1]https://eviltrout.com/2016/02/25/fixing-android-performance.html
qwertyuiop924 · 2016-10-08
Somebody's already done one in C: https://eviltrout.com/2015/06/29/an-emulator-for-tis-100.html And according to Zach, the intended market wasn't just programmers (which is why he explicitly killed bit manipulation, and the largest number a TIS-100 register can hold isn't a power of two), and I've heard tales of non-programmers enjoying it. Then again, if you like Zachtronics games, especially TIS-100, then have I got a hobby for you...
steveklabnik · 2015-10-01
http://eviltrout.com/2013/06/19/adding-support-for-search-engines-to-y… is an old post, but as far as I know, is still basically correct.
vikp · 2015-07-10
Disqus is good for an MVP. It's easy to embed and works well. If you're worried about "owning" the data/community, you could host your own discourse (http://www.discourse.org/) instance and use their embed feature (http://eviltrout.com/2014/01/22/embedding-discourse.html). Embedding is sadly missing inline commenting, though.
regularjack · 2014-10-14
Ember Data is opinionated about the backend, Ember itself isn't. You can use Ember without Ember Data, as is the case with Discourse, one of the largest Ember apps out there. http://eviltrout.com/2013/03/23/ember-without-data.html
iSnow · 2014-03-18
It is strange to see Angular labeled "large" and "monolithic" here, when it was blasted for being too small and simple by one of the Ember guys (http://eviltrout.com/2013/06/15/ember-vs-angular.html). I have suffered trough JEE which is/was really humungous, and Angular is really tiny in comparison.
_frog · 2014-02-27
I really liked Discourse's approach to infinite scrolling[1], it updates the URL as you go with the History API's replaceState() function so you can safely navigate away from the page without losing your position. [1]: http://eviltrout.com/2013/02/16/infinite-scrolling-that-works.html
radq · 2013-09-03
> Search-engine optimization is a large part. It doesn't look like it is too difficult to add search indexing support. http://eviltrout.com/2013/06/19/adding-support-for-search-engines-to-y…
tomdale · 2013-03-31
Ember Data is overkill for many use cases. It may seem counterintuitive, but because Ember's object model is so powerful, you don't need a lot of the model-specific sugar that other libraries provide you—it's baked into every object. To see how easy it is to fetch records using the tools in Ember, see Robin Ward's blog post: http://eviltrout.com/2013/03/23/ember-without-data.html
mwcampbell · 2022-03-02
Aggressive virtualization, especially if it also involves removing stuff that scrolled out of view, also bogs down some screen readers (particularly Windows ones) that have their own representation of the web page. Speaking of both Discourse and screen readers, before my stint at Microsoft, I wrote a Windows screen reader, which tried to detect client-side page navigation by watching for the URL (minus the fragment) to change. Discourse's infinite scrolling implementation broke this heuristic, because Discourse would use the history API to update the URL as the user scrolled. Not sure if I or they were in the wrong there. Interesting that you feel that Discourse penalizes you for being far away from the origin server. When Discourse was new, one of the founders blogged about how their heavy use of client-side JavaScript made the application better for users far away from the origin server: https://eviltrout.com/2013/01/06/turbolinks-and-the-prague-effect.html… Maybe the author had a point, but it sounds like Discourse still relies too much on frequent round trips. Edit to add: > a precise-DOM-updates framework that cares significantly about runtime performance That's Overture, right? I wonder how it compares to Svelte and Solid.
revorad · 2013-02-11
I can repro it. The lag is only of a few milliseconds, but enough to capture a screenshot, so it is jarring for sure. This is on first page load - http://imgur.com/4kB93ZX And this is on clicking through to a post - http://imgur.com/i7B3HOE When I hit back, I get the first page's loading symbol again. Here's another weird thing: Sometimes, when I click from the list of posts page through to a post, scroll down, and then hit back, it takes me to the top of the post instead of back to the list of posts. This happens only sometimes, not always. Also, it looks like you are tracking scroll position by chopping up the page into numbered sections which are tracked in the url. Going back and forth resets the scroll position to the top of the tracked section. This works mostly fine, but is off sometimes by a line or two. Edited to add: In an earlier post[1], Robin argues that using client-side frameworks like Ember increases speed because you can leverage CDNs. But, I think our examples suggest that there are still some speed issues in the client-side rendering, which I think is DHH's point. Even if total times with Ember (request to server and final render) might be less than something like pure Rails, the perceived speed for the user might be lower. Robin gives one anecdote of some people in Prague finding his Ember site faster than others. saurik and I have provided couple more anecdotes :-) But, it might be good to collect some proper data using something like…

Keyboard shortcuts

/Search
j kNext / previous blog
EnterOpen selected blog
vVisit the blog site
fFollow / unfollow
lSwitch grid / list view
dSwitch dark mode
g hHome
g pTop posts
g tTopics
g fFollowing
g lLiked
g yHistory
g qFAQ
EscBack / close