Files
less.js/benchmark/index.js
2016-07-14 13:14:58 -07:00

94 lines
2.7 KiB
JavaScript

var path = require('path'),
fs = require('fs'),
now = require("performance-now");
var less = require('../lib/less-node');
var file = path.join(__dirname, 'benchmark.less');
if (process.argv[2]) { file = path.join(process.cwd(), process.argv[2]) }
fs.readFile(file, 'utf8', function (e, data) {
var start, total;
console.log("Benchmarking...\n", path.basename(file) + " (" +
parseInt(data.length / 1024) + " KB)", "");
var renderBenchmark = []
, parserBenchmark = []
, evalBenchmark = [];
var totalruns = 30;
var ignoreruns = 5;
var i = 0;
nextRun();
function nextRun() {
var start, renderEnd, parserEnd;
start = now();
less.parse(data, {}, function(err, root, imports, options) {
if (err) {
less.writeError(err);
process.exit(3);
}
parserEnd = now();
var tree, result;
tree = new less.ParseTree(root, imports);
result = tree.toCSS(options);
renderEnd = now();
renderBenchmark.push(renderEnd - start);
parserBenchmark.push(parserEnd - start);
evalBenchmark.push(renderEnd - parserEnd);
i += 1;
//console.log('Less Run #: ' + i);
if(i < totalruns) {
nextRun();
}
else {
finish();
}
});
}
function finish() {
function analyze(benchmark, benchMarkData) {
console.log('----------------------');
console.log(benchmark);
console.log('----------------------');
var totalTime = 0;
var mintime = Infinity;
var maxtime = 0;
for(var i = ignoreruns; i < totalruns; i++) {
totalTime += benchMarkData[i];
mintime = Math.min(mintime, benchMarkData[i]);
maxtime = Math.max(maxtime, benchMarkData[i]);
}
var avgtime = totalTime / (totalruns - ignoreruns);
var variation = maxtime - mintime;
var variationperc = (variation / avgtime) * 100;
console.log("Min. Time: " + Math.round(mintime) + " ms");
console.log("Max. Time: " + Math.round(maxtime) + " ms");
console.log("Total Average Time: " + Math.round(avgtime) + " ms (" +
parseInt(1000 / avgtime *
data.length / 1024) + " KB\/s)");
console.log("+/- " + Math.round(variationperc) + "%");
console.log("");
}
analyze('Parsing', parserBenchmark);
analyze('Evaluation', evalBenchmark);
analyze('Render Time', renderBenchmark);
}
});