Use crc32 instead of md5 for computing subdomain candidate

This commit is contained in:
Raul Ochoa
2017-03-23 01:03:45 +01:00
parent 64dfdba94d
commit 5e429ba71f
+25 -3
View File
@@ -91,9 +91,31 @@ function getCdnDomain(serverMetadata, resource) {
return null;
}
// ref https://jsperf.com/js-crc32
function crcTable() {
var c;
var table = [];
for (var n = 0; n < 256; n++) {
c = n;
for (var k = 0; k < 8; k++) {
c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
}
table[n] = c;
}
return table;
}
var CRC_TABLE = crcTable();
function crc32(str) {
var crc = 0 ^ (-1);
for (var i = 0; i < str.length; i++) {
crc = (crc >>> 8) ^ CRC_TABLE[(crc ^ str.charCodeAt(i)) & 0xFF];
}
return (crc ^ (-1)) >>> 0;
}
function subdomain(subdomains, resource) {
var resourceHash = crypto.createHash('md5').update(resource, 'binary').digest('hex');
var index = parseInt(resourceHash, 16) % subdomains.length;
var index = crc32(resource) % subdomains.length;
return subdomains[index];
}
module.exports.subdomain = subdomain;
module.exports.subdomain = subdomain;