Hashing strings (v28)

Revision 28 of this benchmark created by Jelle De Loecker on


Description

Looking for the fastest hash function to get a unique id of a string.

Setup

function bitwise(str) {
      var hash = 0,
        len = str.length,
        i = -1;
      while (++i < len) {
        hash = ((hash << 5) - hash) + str.charCodeAt(i);
      }
      return hash;
    }
    
    function numbers(str) {
      var res = 0,
        len = str.length,
        i = -1;
      while (++i < len) {
        res = res * 31 + str.charCodeAt(i);
      }
      return res;
    }
    
    function bitwiseconv(str) {
      var hash = 0,
        len = str.length,
        i = -1;
      while (++i < len) {
        hash = ((hash << 5) - hash) + str.charCodeAt(i);
        hash = hash & hash; // Convert to 32bit integer
      }
      return hash;
    }
    
    function numbersconv(str) {
      var res = 0,
        len = str.length,
        i = -1;
      while (++i < len) {
        res = res * 31 + str.charCodeAt(i);
        res = res & res;
      }
      return res;
    }
    
    function bitwiseReduce(s){
        return s.split('').reduce(
            function(a,b) {
                    a=((a<<5)-a)+b.charCodeAt(0);
                    return a&a;
            }
        ,0);              
    }

Test runner

Ready to run.

Testing in
TestOps/sec
Bitwise based function (No integer conversion)
bitwise('[LOG] This is a a not-too-long log message, one that will commonly pop up in my application');
ready
Number based function (No integer conversion)
numbers('[LOG] This is a a not-too-long log message, one that will commonly pop up in my application');
ready
Bitwise based function
bitwiseconv('[LOG] This is a a not-too-long log message, one that will commonly pop up in my application');
ready
Number based function
numbersconv('[LOG] This is a a not-too-long log message, one that will commonly pop up in my application');
ready

Revisions

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