The "send" function from the 0.4 API doesn't actually stream the template
so much as it just passes chunks of the rendered template through to the
callback as they are rendered. The callbacks are fired synchronously either
way, and using a "send" function just adds extra overhead and makes things
slower.
This commit is a complete rewrite of the core mustache.js file with two
main goals: 1) a major performance boost and 2) better compliance with
the mustache spec.
In order to improve performance templates are pre-compiled to JavaScript
functions. These compiled functions take a view, a partials object, and
an optional callback as arguments. They are cached to prevent
unnecessary re-compilation of an already compiled template. Both of
these enhancements facilitate a generous boost in performance.
A few other notes:
- The mustache.js file is now both browser and CommonJS ready without
any modification.
- The API exposes two main methods: Mustache.compile and
Mustache.render. The former is used to generate a function for a given
template, while the latter is a higher-level function that is used to
compile and render a template in one shot. Mustache.to_html is still
available for backwards compatibility.
- The concept of pragmas is removed to conform more closely to the
original mustache spec. The dot symbol still works to reference the
current item in an array.
- The parser is much more strict about whitespace than it was before. The
rule is simple: if a line contains only a non-variable tag (i.e. not
{{tag}} or {{{tag}}}) and whitespace, that line is ignored in the
output. Users may use the "space" option when compiling templates to
preserve every whitespace character in the original template.
- The parser is able to provide detailed information about where errors
occur when parsing and rendering templates, including the line number
and surrounding code context.