djbhash

Benchmark created on


Setup

// Build a lot of average length string to test on
    
    var strs=[];
    
    var strbuff = 'a';
    for (var i = 0; i < 1000; i++) {
      var lc = strbuff.charAt(strbuff.length - 1);
      if (lc == 9) {
        strbuff += 'a';
      } else if (lc == 'z') {
        strbuff = strbuff.substr(0,strbuff.length -1);
        strbuff += 'A';
      } else if (lc == 'Z') {
        strbuff = strbuff.substr(0,strbuff.length -1);
        strbuff += '0';
      } else {
        strbuff = strbuff.substr(0,strbuff.length -1);
        strbuff += String.fromCharCode(lc.charCodeAt(0)+1);
      }
      strs.push(strbuff);        
    }
    
    function DJBHashv1(str) {
        var hash = 5381;
        
        for(var i = 0; i < str.length; i++) {
            hash = 33 * hash + str.charCodeAt(i);
        }
        
        return hash;
    }
    function DJBHashv2(str) {
        var hash = 5381;
        
        for(var i = 0, l = str.length; i < l; i++) {
            hash = 33 * hash + str.charCodeAt(i);
        }
        
        return hash;
    }

function DJBHashv3(str) {
        var hash = 5381;
        
        for(var i = 0; i < str.length; i++) {
            hash = ((hash << 5) + hash) + str.charCodeAt(i);
        }
        
        return hash;
    }

function DJBHashv4(str) {
        var hash = 5381;
        
        for(var i = 0, l = str.length; i < l; i++) {
            hash = ((hash << 5) + hash) + str.charCodeAt(i);
        }
        
        return hash;
    }

Test runner

Ready to run.

Testing in
TestOps/sec
v1
DJBHashv1('abcdefghijklmnopqrstuvwxyz');
ready
v2
DJBHashv2('abcdefghijklmnopqrstuvwxyz');
ready
v3
DJBHashv3('abcdefghijklmnopqrstuvwxyz');
ready
v4
DJBHashv4('abcdefghijklmnopqrstuvwxyz');
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.