131 lines
3.1 KiB
JavaScript
131 lines
3.1 KiB
JavaScript
var _ = require('underscore'),
|
|
runner = require('./util/template-runner'),
|
|
|
|
eco, dust, Handlebars, Mustache, eco;
|
|
|
|
try {
|
|
dust = require('dustjs-linkedin');
|
|
} catch (err) { /* NOP */ }
|
|
|
|
try {
|
|
Mustache = require('mustache');
|
|
} catch (err) { /* NOP */ }
|
|
|
|
try {
|
|
eco = require('eco');
|
|
} catch (err) { /* NOP */ }
|
|
|
|
function error() {
|
|
throw new Error('EWOT');
|
|
}
|
|
|
|
function makeSuite(bench, name, template, handlebarsOnly) {
|
|
// Create aliases to minimize any impact from having to walk up the closure tree.
|
|
var templateName = name,
|
|
|
|
context = template.context,
|
|
partials = template.partials,
|
|
|
|
handlebarsOut,
|
|
compatOut,
|
|
dustOut,
|
|
ecoOut,
|
|
mustacheOut;
|
|
|
|
var handlebar = Handlebars.compile(template.handlebars, {data: false}),
|
|
compat = Handlebars.compile(template.handlebars, {data: false, compat: true}),
|
|
options = {helpers: template.helpers};
|
|
_.each(template.partials && template.partials.handlebars, function(partial, partialName) {
|
|
Handlebars.registerPartial(partialName, Handlebars.compile(partial, {data: false}));
|
|
});
|
|
|
|
handlebarsOut = handlebar(context, options);
|
|
bench('handlebars', function() {
|
|
handlebar(context, options);
|
|
});
|
|
|
|
compatOut = compat(context, options);
|
|
bench('compat', function() {
|
|
compat(context, options);
|
|
});
|
|
|
|
if (handlebarsOnly) {
|
|
return;
|
|
}
|
|
|
|
if (dust) {
|
|
if (template.dust) {
|
|
dustOut = false;
|
|
dust.loadSource(dust.compile(template.dust, templateName));
|
|
|
|
dust.render(templateName, context, function(err, out) { dustOut = out; });
|
|
|
|
bench('dust', function() {
|
|
dust.render(templateName, context, function() {});
|
|
});
|
|
} else {
|
|
bench('dust', error);
|
|
}
|
|
}
|
|
|
|
if (eco) {
|
|
if (template.eco) {
|
|
var ecoTemplate = eco.compile(template.eco);
|
|
|
|
ecoOut = ecoTemplate(context);
|
|
|
|
bench('eco', function() {
|
|
ecoTemplate(context);
|
|
});
|
|
} else {
|
|
bench('eco', error);
|
|
}
|
|
}
|
|
|
|
if (Mustache) {
|
|
var mustacheSource = template.mustache,
|
|
mustachePartials = partials && partials.mustache;
|
|
|
|
if (mustacheSource) {
|
|
mustacheOut = Mustache.to_html(mustacheSource, context, mustachePartials);
|
|
|
|
bench('mustache', function() {
|
|
Mustache.to_html(mustacheSource, context, mustachePartials);
|
|
});
|
|
} else {
|
|
bench('mustache', error);
|
|
}
|
|
}
|
|
|
|
// Hack around whitespace until we have whitespace control
|
|
handlebarsOut = handlebarsOut.replace(/\s/g, '');
|
|
function compare(b, lang) {
|
|
if (b == null) {
|
|
return;
|
|
}
|
|
|
|
b = b.replace(/\s/g, '');
|
|
|
|
if (handlebarsOut !== b) {
|
|
throw new Error('Template output mismatch: ' + name
|
|
+ '\n\nHandlebars: ' + handlebarsOut
|
|
+ '\n\n' + lang + ': ' + b);
|
|
}
|
|
}
|
|
|
|
compare(compatOut, 'compat');
|
|
compare(dustOut, 'dust');
|
|
compare(ecoOut, 'eco');
|
|
compare(mustacheOut, 'mustache');
|
|
}
|
|
|
|
module.exports = function(grunt, callback) {
|
|
// Deferring load incase we are being run inline with the grunt build
|
|
Handlebars = require('../lib');
|
|
|
|
console.log('Execution Throughput');
|
|
runner(grunt, makeSuite, function(times, scaled) {
|
|
callback(scaled);
|
|
});
|
|
};
|