Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Hm. How does this compare to Mithril JS (http://lhorie.github.io/mithril/)?

I just looked at the doc and read this thread (at 61 comments).

Same:

* virtual dom * has its own tag syntax * Mithril has MSX, but also supports regular JS data structure with m("tag", {attr:val, onclick: func, [more tags, "text"]} * router

Different:

* Where Mithril allows you to build and transform resulting template structure before virtual DOM generation, Riot mixes HTML tags and JS, builds tags from that which can be composed * Uses a compiler, Mithril without MSX can work directly in the browser * Probably other stuff, too, I'm just reading the examples, at least is not supported Ajax/XHR

Speed is a big question. Mithril is plenty fast (there's a benchmark on the home page, and somewhere I saw a TodoMVC comparison which put Mithril near the top few months back).

I have not yet formed an opinion, but RiotJS' size and web component approach intrigue me. More example apps, plz, with client/server communication and CRUD ops.



Hi, Mithril author here.

A few important differences as far as I can tell:

- Riot apparently requires a compile step (at least as far as being able to follow the docs goes), Mithril doesn't

- Riot has no AJAX support, Mithril does (plus promises, plus an idiomatic workflow to work with async ajaxy stuff: `var prop = m.request(...)`)

- I could not find anything about keys in the Riot docs. Keys are a very important part of the virtual dom diff algorithm (basically it's the mechanism that lets you sort tables without rebuilding the whole thing from scratch)

- Riot's router appears to support only hash mode. Mithril's also supports HTML5 mode (which allows you to skip the # symbol), and a querystring mode that is step in between the two in terms of tradeoffs.

- Both Riot and Mithril redraw by default on events, but Riot appears to lack APIs to control when NOT to redraw. This is kind of a big deal with cases like expensive oninput, complex event bubbling behavior, etc.

Other than that, I just have a small nitpick:

> Riot mixes HTML tags and JS, builds tags from that which can be composed

As far as I can tell, Riot components can be nested, but I'm not sure they can be composed per se. Real composition would allow you, for example, to have lazy components (i.e. pass a component A to another component B and evaluate A at a specific point in B's virtual dom tree). A modal is an example of this.

> RiotJS' size and web component approach intrigue me

Mithril supports the `is` attribute, and I saw someone using custom elements with a polyfill ( https://github.com/WebReflection/document-register-element ) and Mithril. It's basically "Web components, the good parts". Worth looking into.


riot.mountTo() lets you "lazily" render a tag on a specific node.

Thanks for the analysis.


Thanks for the comparison. If you look in the demo code, you'll see you don't necessarily need the compile step, just write your custom tags with riot.tag and use strings for the would-be compiled part.


Interesting, I missed that. But I assume that's not idiomatic, is it?


Should then be trivial to whip up a require.js plugin that leverages riot.tag for working on-the-fly in development, but which compiles during a build/optimize process.


Definitely some similarities exist like you listed.

Riot offers following to the (massive) client-side table:

1. Custom tags (with unscary HTML + JS syntax)

2. Minimalism (both size and API surface)

3. Performance (minimizing DOM operations with virtual DOM)

The 3rd item is not battle-tested / benchmarked yet and there is probably room for improvements.


Thank you for your comment.

Me thinks Mithril is fairly minimal, too, but this point can't be completely objective. If API allows to do things I find complicated to do myself, then I happily accept a little bloat here and there.

I will be looking at Riot custom tags and how they might help (or hinder) creating components out of functionality. There is currently an interesting discussion on the Mithril mailing list about these things. Also it's what attracted me to Angular long time back (and what drove me away from it, as well).


Nothing in the Universe is completely objective


I love the differing thought patterns apparent in the length of your and lhorie's response to this question. Like the framework, this response is minimal.


To be fair, you can get all 3 of those w/ Mithril. If you want a good comparison, the devil's in the details :)


That's one way to spin it.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: