Merge pull request #642 from CartoDB/resources-urls-crc-hash

Use crc32 instead of md5 for computing subdomain candidate
This commit is contained in:
Raul Ochoa
2017-03-23 01:21:50 +01:00
committed by GitHub

View File

@@ -1,5 +1,3 @@
var crypto = require('crypto');
var dot = require('dot');
dot.templateSettings.strip = false;
@@ -91,9 +89,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;