diff options
Diffstat (limited to 'library/moment/tasks/history.js')
-rw-r--r-- | library/moment/tasks/history.js | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/library/moment/tasks/history.js b/library/moment/tasks/history.js new file mode 100644 index 000000000..85e83338f --- /dev/null +++ b/library/moment/tasks/history.js @@ -0,0 +1,123 @@ +var https = require('https'), + zlib = require('zlib'), + path = require('path'), + fs = require('fs'); + +var count = 0; +var resolved = 0; + +var outputs = []; + +var done; + +function check() { + if (resolved === count) { + normalize(); + display(); + } +} + +function makeBar(length) { + var i = ''; + while (i.length < length) { + i += '='; + } + return i; +} + +function normalize() { + var i, + max = 0, + max2 = 0; + for (i = 0; i < count; i++) { + max = Math.max(max, outputs[i].gzip); + max2 = Math.max(max2, outputs[i].original); + } + for (i = 0; i < count; i++) { + outputs[i].bargraph = makeBar((outputs[i].gzip / max) * 80); + outputs[i].bargraph2 = makeBar((outputs[i].original / max2) * 80); + } +} + +function display() { + var i; + for (i = 0; i < count; i++) { + console.log(outputs[i].version + ' ' + outputs[i].gzip + ' ' + outputs[i].original); + console.log('gzip ' + outputs[i].bargraph); + console.log('orig ' + outputs[i].bargraph2); + } + done(); +} + +function getSizeAtVersion(version, path) { + var data = '', + op = {}, + + req = https.request({ + host: 'raw.github.com', + port: 443, + path: '/timrwood/moment/' + version + path + }, function (res) { + res.setEncoding('utf8'); + res.on('data', function (chunk) { + data += chunk; + }); + res.on('end', function (e) { + zlib.gzip(data, function (error, result) { + op.version = version; + op.gzip = result.length; + op.original = data.length; + resolved++; + check(); + }); + }); + }); + + req.on('error', function (e) { + console.log('problem with request: ' + e.message); + }); + req.end(); + count++; + outputs.push(op); +} + +function getRemote() { + var oldVersions = '1.0.1 1.1.0 1.1.1 1.1.2 1.2.0 1.3.0 1.4.0'.split(' '), + newVersions = '1.5.0 1.5.1 1.6.0 1.6.1 1.7.0 1.7.1'.split(' '), + i; + + for (i = 0; i < oldVersions.length; i++) { + getSizeAtVersion(oldVersions[i], '/moment.min.js'); + } + for (i = 0; i < newVersions.length; i++) { + getSizeAtVersion(newVersions[i], '/min/moment.min.js'); + } +} + +function getLocal() { + count++; + var op = {}; + outputs.push(op); + fs.readFile(path.normalize(__dirname + '/../min/moment.min.js'), 'utf8', function (err, data) { + if (err) { + throw err; + } + zlib.gzip(data, function (error, result) { + op.version = '.next'; + op.gzip = result.length; + op.original = data.length; + resolved++; + check(); + }); + }); +} + + + +module.exports = function (grunt) { + grunt.registerTask('history', 'Check the codebase filesize over different releases.', function () { + done = this.async(); + getRemote(); + getLocal(); + }); +}; |