adler-32 simple vs optimized

Benchmark created by imaya on


Preparation HTML

<script>
  //--------------------------------------------------
  // simple impl
  //--------------------------------------------------
  function adler32_simple(array) {
    return adler32_simple_update(1, array);
  }

  function adler32_simple_update(adler, array) {
    var s1 = adler & 0xffff,
        s2 = (adler >>> 16) & 0xffff;

    for (var i = 0, l = array.length; i < l; i++) {
      s1 = (s1 + array[i]) % 65521;
      s2 = (s2 + s1) % 65521;
    }

    return ((s2 << 16) | s1) >>> 0;
  }

  //--------------------------------------------------
  // optimized impl
  //--------------------------------------------------
  function adler32_opti(array) {
    return adler32_opti_update(1, array);
  }

  function adler32_opti_update(adler, array) {
    var s1 = adler & 0xffff,
        s2 = (adler >>> 16) & 0xffff;
    var len = array.length;
    var tlen;
    var i = 0;

    while (len > 0) {
      tlen = len > 5550 ? 5550 : len;
      len -= tlen;
      do {
        s1 += array[i++];
        s2 += s1;
      } while (--tlen);

      s1 %= 65521;
      s2 %= 65521;
    }

    return ((s2 << 16) | s1) >>> 0;
  }
</script>

Setup

var testData = [];
    var num = 100000;
    
    for (var i = 0; i < num; ++i) {
      testData[i] = (i * 2) & 0xff;
    }

Test runner

Ready to run.

Testing in
TestOps/sec
simple
adler32_simple(testData);
ready
opti
adler32_opti(testData);
 
ready

Revisions

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