-
Notifications
You must be signed in to change notification settings - Fork 31
Expand file tree
/
Copy pathbenchmark.js
More file actions
94 lines (73 loc) · 3.57 KB
/
benchmark.js
File metadata and controls
94 lines (73 loc) · 3.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
'use strict';
var zlib = require('zlib');
var fs = require('fs');
var path = require('path');
var Q = require('q');
var deltaCalculator = require('../../node_modules/sw-delta-nodejs/lib/deltaCalculator.js');
var deltaApplier = require('../../lib/deltaApplier.js');
var filesToTest = require('./files.json');
var totalServerTime = 0;
var totalClientTime = 0;
var totalNewFileSize = 0;
var totalDeltaSize = 0;
var totalNewFileCompressedSize = 0;
var totalDeltaCompressedSize = 0;
function testOneFile(file) {
var deferred = Q.defer();
var oldFile = fs.readFileSync(path.join(__dirname, '../../', file.oldFile), 'utf-8');
var newFile = fs.readFileSync(path.join(__dirname, '../../', file.newFile), 'utf-8');
var startTime = Date.now();
var delta = deltaCalculator.getDelta(oldFile, newFile);
var deltaTime = Date.now();
var newNewFile = deltaApplier.applyDelta(oldFile, delta);
var endTime = Date.now();
if (newNewFile !== newFile) {
deferred.reject('ERROR: file generated from delta doesn\'t equal the original file (' + file.newFile + ')');
return;
}
zlib.gzip(new Buffer(newFile, 'utf8'), function(err, newFileBuffer) {
if (err) {
deferred.reject('Could not compress new file with gzip');
} else {
var newFileCompressedSize = newFileBuffer.length;
zlib.gzip(new Buffer(delta, 'utf8'), function(err, deltaBuffer) {
if (err) {
deferred.reject('Could not compress delta with gzip');
} else {
var serverTime = deltaTime - startTime;
var clientTime = endTime - deltaTime;
var newFileSize = newFile.length;
var deltaSize = delta.length;
var deltaCompressedSize = deltaBuffer.length;
totalServerTime += serverTime;
totalClientTime += clientTime;
totalNewFileSize += newFileSize;
totalDeltaSize += deltaSize;
totalNewFileCompressedSize += newFileCompressedSize;
totalDeltaCompressedSize += deltaCompressedSize;
console.log('\nFile ' + file.newFile);
console.log('Server time: ' + serverTime + 'ms');
console.log('Client time: ' + clientTime + 'ms');
console.log('Uncompressed delta size: ' + deltaSize + ' bytes (' + Math.round(deltaSize*100/newFileSize) + '% of newFile)');
console.log('Gzipped delta size: ' + deltaCompressedSize + ' bytes (' + Math.round(deltaCompressedSize*100/newFileCompressedSize) + '% of newFile)');
deferred.resolve();
}
});
}
});
return deferred.promise;
}
function testOneFilePromise(file) {
return testOneFile(file);
}
Q.all(filesToTest.files.map(testOneFilePromise))
.then(function() {
console.log('\nBenchmark is complete!');
console.log('Total server time: ' + totalServerTime + 'ms');
console.log('Total client time: ' + totalClientTime + 'ms');
console.log('Total uncompressed delta size: ' + totalDeltaSize + ' bytes (' + Math.round(totalDeltaSize*100/totalNewFileSize) + '% of newFiles)');
console.log('Total gzipped delta size: ' + totalDeltaCompressedSize + ' bytes (' + Math.round(totalDeltaCompressedSize*100/totalNewFileCompressedSize) + '% of newFile)');
})
.fail(function(error) {
console.log(error);
});