uuid 2

JavaScript performance comparison

Test case created

Preparation code

 
<script>
Benchmark.prototype.setup = function() {
    //http://www.broofa.com/Tools/Math.uuid.js
   
    // Private array of chars to use
      var CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
   
    function uuid() {
        var chars = CHARS, uuid = [], i;
   
          // rfc4122, version 4 form
          var r;
   
          // rfc4122 requires these characters
          uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
          uuid[14] = '4';
   
          // Fill in random data.  At i==19 set the high bits of clock sequence as
          // per rfc4122, sec. 4.1.5
          for (i = 0; i < 36; i++) {
            if (!uuid[i]) {
              r = 0 | Math.random()*16;
              uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
            }
          }
   
        return uuid.join('');
      };
   
      // A more performant, but slightly bulkier, RFC4122v4 solution.  We boost performance
      // by minimizing calls to random()
    function uuidFast () {
        var chars = CHARS, uuid = new Array(36), rnd=0, r;
        for (var i = 0; i < 36; i++) {
          if (i==8 || i==13 ||  i==18 || i==23) {
            uuid[i] = '-';
          } else if (i==14) {
            uuid[i] = '4';
          } else {
            if (rnd <= 0x02) rnd = 0x2000000 + (Math.random()*0x1000000)|0;
            r = rnd & 0xf;
            rnd = rnd >> 4;
            uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
          }
        }
        return uuid.join('');
      };
   
      // A more compact, but less performant, RFC4122v4 solution:
      function uuidCompact () {
        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
          var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
          return v.toString(16);
        });
      };
   
   
    function uuidFake() {
    var S4 = function (){
                        return Math.floor(Math.random() * 0x10000 /* 65536 */).toString(16);
                };
   
                return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
    }
};
</script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
uuid
uuid()
pending…
uuidFast
uuidFast()
pending…
uuidCompact
uuidCompact()
pending…
uuidFake
uuidFake()
pending…

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

Compare results of other browsers

0 comments

Add a comment