npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

mote

v0.2.0

Published

A fast mustache template engine for JavaScript

Downloads

1,849

Readme

mote.js

Mote is (yet) another mustache implementation.

At the moment, it appears to be the fastest JS mustache engine.

For crying out loud, why?

It started out as a learning exercise. There was a well-defined spec to measure progress against, and I was just messing around.

Once there was a working implementation, I looked around to see how it compared. Turned out that it was dog-slow. So then the challenge became speed: could mote be competitive with libraries like mustache.js, Handlebars, Hogan, and dust?

The answer, extremely surprising to me, was a resounding yes.

Benchmarks

The libraries being tested:

Mustache: 0.5.0-dev Handlebars: 1.0.beta.6 Dust: 0.3.0 Hogan: 1.0.5 Mote: 0.1.0

Each benchmark is run by first compiling the rendering function for each library, then benchmarking it with [benchmark.js].

I'm going to make these runnable online, but for now, these are latest results I get on my machine (run with node bench/bench.js):

[String]
mu: Hello World!
ho: Hello World!
mo: Hello World!
hb: Hello World!
du: Hello World!
mustache x 8,580,404 ops/sec ±0.56% (59 runs sampled)
hogan x 12,595,209 ops/sec ±0.60% (61 runs sampled)
mote x 10,011,836 ops/sec ±0.45% (62 runs sampled)
handlebars x 10,171,715 ops/sec ±0.86% (63 runs sampled)
dust x 2,458,468 ops/sec ±0.31% (61 runs sampled)
Fastest: hogan
[Replace]
mu: Hello Mick! You have 30 new messages.
ho: Hello Mick! You have 30 new messages.
mo: Hello Mick! You have 30 new messages.
hb: Hello Mick! You have 30 new messages.
du: Hello Mick! You have 30 new messages.
mustache x 730,556 ops/sec ±0.80% (61 runs sampled)
hogan x 2,138,597 ops/sec ±0.58% (63 runs sampled)
mote x 2,794,455 ops/sec ±0.48% (62 runs sampled)
handlebars x 2,781,628 ops/sec ±0.59% (62 runs sampled)
dust x 1,432,765 ops/sec ±0.51% (61 runs sampled)
Fastest: mote,handlebars
[Array]
mu: MoeLarryCurlyShemp
ho: MoeLarryCurlyShemp
mo: MoeLarryCurlyShemp
hb: MoeLarryCurlyShemp
du: MoeLarryCurlyShemp
mustache x 292,332 ops/sec ±1.22% (60 runs sampled)
hogan x 844,588 ops/sec ±0.64% (62 runs sampled)
mote x 1,164,609 ops/sec ±0.59% (64 runs sampled)
handlebars x 811,080 ops/sec ±0.93% (56 runs sampled)
dust x 665,598 ops/sec ±0.75% (61 runs sampled)
Fastest: mote
[Object]
mu: Larry45
ho: Larry45
mo: Larry45
hb: Larry45
du: Larry45
mustache x 510,149 ops/sec ±0.60% (64 runs sampled)
hogan x 1,486,618 ops/sec ±0.62% (61 runs sampled)
mote x 2,239,848 ops/sec ±0.80% (62 runs sampled)
handlebars x 1,305,359 ops/sec ±1.18% (60 runs sampled)
dust x 1,108,808 ops/sec ±0.79% (63 runs sampled)
Fastest: mote
[Partial]
mu: Hello Moe! You have 15 new messages.Hello Larry! You have 5 new messages.Hello Curly! You have 1 new messages.
ho: Hello Moe! You have 15 new messages.Hello Larry! You have 5 new messages.Hello Curly! You have 1 new messages.
mo: Hello Moe! You have 15 new messages.Hello Larry! You have 5 new messages.Hello Curly! You have 1 new messages.
hb: Hello Moe! You have 15 new messages.Hello Larry! You have 5 new messages.Hello Curly! You have 1 new messages.
du: Hello Moe! You have 15 new messages.Hello Larry! You have 5 new messages.Hello Curly! You have 1 new messages.
mustache x 180,849 ops/sec ±0.51% (62 runs sampled)
hogan x 280,071 ops/sec ±0.58% (58 runs sampled)
mote x 581,618 ops/sec ±0.45% (62 runs sampled)
handlebars x 529,142 ops/sec ±1.08% (60 runs sampled)
dust x 489,489 ops/sec ±0.83% (61 runs sampled)
Fastest: mote
[Recursion]
mu: 11.11.1.1
ho: 11.11.1.1
mo: 11.11.1.1
hb: 11.11.1.1
du: 11.11.1.1
mustache x 219,908 ops/sec ±0.53% (60 runs sampled)
hogan x 370,656 ops/sec ±0.83% (63 runs sampled)
mote x 563,740 ops/sec ±0.61% (62 runs sampled)
handlebars x 546,473 ops/sec ±0.92% (55 runs sampled)
dust x 545,433 ops/sec ±1.11% (60 runs sampled)
Fastest: mote,handlebars,dust
[Complex]
mu: <h1>Colors</h1><ul><li><strong>red</strong></li><li><a href="#Green">green</a></li><li><a href="#Blue">blue</a></li></ul>
ho: <h1>Colors</h1><ul><li><strong>red</strong></li><li><a href="#Green">green</a></li><li><a href="#Blue">blue</a></li></ul>
mo: <h1>Colors</h1><ul><li><strong>red</strong></li><li><a href="#Green">green</a></li><li><a href="#Blue">blue</a></li></ul>
hb: <h1>Colors</h1><ul><li><strong>red</strong></li><li><a href="#Green">green</a></li><li><a href="#Blue">blue</a></li></ul>
du: <h1>Colors</h1><ul><li><strong>red</strong></li><li><a href="#Green">green</a></li><li><a href="#Blue">blue</a></li></ul>
mustache x 115,937 ops/sec ±0.55% (64 runs sampled)
hogan x 326,612 ops/sec ±0.77% (63 runs sampled)
mote x 398,851 ops/sec ±0.51% (55 runs sampled)
handlebars x 295,103 ops/sec ±1.02% (63 runs sampled)
dust x 339,315 ops/sec ±0.57% (60 runs sampled)
Fastest: mote

Mustache-spec compliance

Mote is fully compliant with all the required specs. To run the specs:

node spec/run_specs.js all

There is support for lambdas, but it doesn't follow the spec. It adheres more closely to how Handlebars and dust have implemented lambda functionality. I'll document this better soon, for now you can look through the source.

Roadmap

  • npm packaging
  • utilities for server-side compilation
  • documentation