16 comments

[ 2.8 ms ] story [ 51.5 ms ] thread
Maybe it's just me, but I honestly have trouble taking anyone who uses mustache templates seriously because I automatically assume they've never worked on a large website.
I'm the co-author of Matador. I worked on Twitter.com - which is a relatively sized website - and we used Mustache... so there's that.
Twitter has about 5 "pages" on their whole website. From a template perspective it's the MOST simple kind of website you can build. So, there's that.
I was only counting the one page after logging in, which does everything. It's how web apps work.
From what I've read, Github uses Mustache also. Logic-less templates are nice. It keeps code out of the views.

  It keeps code out of the views.
...and put it in controllers, which is terrible for large-scale organization. I would hate to see what their back-end looks like.
With that said, you obviously know little about Mustache and how to use it thus not contributing anything meaningful.

I recommend you check out Chris Wanstrath's mustache library for Ruby: https://github.com/defunkt/mustache#readme

Yeah so instead of having a controller and a view, you have a controller and a separate formatter class which looks like this:

  module ViewHelpers
   def gravatar
    gravatar_id = Digest::MD5.hexdigest(self[:email].to_s.strip.downcase)
    gravatar_for_id(gravatar_id)
   end

   def gravatar_for_id(gid, size = 30)
    "#{gravatar_host}/avatar/#{gid}?s=#{size}"
   end

   def gravatar_host
    @ssl ? 'https://secure.gravatar.com' : 'http://www.gravatar.com'
   end
  end
I argue this will get extremely tiresome for large websites.
Works pretty well for us (twitter.com).
I'd be really interested to see how Mustache does in real world performance vs., say, PHP or Ruby templates. I'm also curious about using it to offload rendering to the browser, particularly when using Ajax or UI binding.

While Mustache sometimes seems like a solution in search of problem, I do like that it's completely logicless, and so forces all logic, even display logic, into the controller.

I work for GameSpot.com and we've used Mustache on it.
I interviewed for a job @Twilio - they were using Handlebars, a Mustache variant. Also, here is my mini-chance to rant about that: I had 4 phone and 6 in-person interviews -- didn't get hired. Argh! How could anyone make it through that? Also - i'm a generalist, which seems to have kept me out of both Facebook and Twilio. /rant
@dustindiaz I'm curious about the usecase for Matador. Its mentioned in the docs that it uses Express. I use Express pretty heavily and it seems that most of the things made available via Matador is already available in Express. Why should I consider stacking Matador on top of a framework that already works pretty well?
Great question. And fwiw, we love Express too! After building a number of Express applications myself, I quite often ran into organizational issues (such is the loosey goosey way of Sinatra). Matador takes more of a Rails approach to organizing your code; of course, without all the extra cruft that comes with Rails.

We still tack on Express requests and responses onto your controller instances.

Most of all, the router -> controller mapping with request filtering (middleware-like) is where Matador comes in most useful. We have other features we'd like to add, especially in the scaffolding layer, but figured we'd open source early and get developer feedback.

Thanks!

TJ's goal (in my view) is to make a really unopinionated way for node to interact with the web in a modern way, standardizing things like routes, sessions, etc. Matador would provide some opinion on top of Express to standardize file locations, or do a Rails-like inference of inflection perhaps. (I haven't looked deeply).

I wrote my own version of this last year, and found that it was a really good learning experience, but I didn't think it was worth publishing publicly. However, there is definitely room for a scaffolded MVC prototyping framework on top of Express, imo.

yup that's certainly correct. Express is still intentionally much lower level so myself and everyone can just craft what they want without fighting some larger framework