wnslidersperf (v3)

Revision 3 of this benchmark created by Luke on


Setup

var valueFromPxPositionLookupHash = {},
        valueFromPxPositionLookup = {},
        valueFromPxPositionLookupMap = {};
    
    var populateValueFromPxPositionLookupHash = function() {
      valueFromPxPositionLookupHash = {};
    
      var min = 50,
          max = 1000,
          step = 1,
          width = 300;
    
      for (var i=0;i<=width; i++) {
        var hash = i + '-' + min + '-' + max + '-' + step + '-' + width;
    
        var value = Math.round(
          (min + (i / width) * (max - min)) / step
        ) * step;
    
        if (value < min) {
          value = min;
        } else if (value > max) {
          value = max;
        }
        valueFromPxPositionLookup[hash] = value;
      }
    };
    
    var populateValueFromPxPositionLookup = function() {
      valueFromPxPositionLookup = {};
    
      var min = 50,
          max = 1000,
          step = 1,
          width = 300;
    
      for (var i=0;i<=width; i++) {
        var value = Math.round(
          (min + (i / width) * (max - min)) / step
        ) * step;
    
        if (value < min) {
          value = min;
        } else if (value > max) {
          value = max;
        }
        valueFromPxPositionLookup[i] = value;
      }
    };
    
    var populateValueFromPxPositionMap = function() {
      valueFromPxPositionLookupMap = {};
    
      var min = 50,
          max = 1000,
          step = 1,
          width = 300;
    
      for (var i=0;i<=width; i++) {
        var pxPosition = i;
        var value = Math.round(
          (min + (i / width) * (max - min)) / step
        ) * step;
    
        if (value < min) {
          value = min;
        } else if (value > max) {
          value = max;
        }
        if (valueFromPxPositionLookupMap[width] === undefined) {
          valueFromPxPositionLookupMap[width] = {};
        }
        if (valueFromPxPositionLookupMap[width][step] === undefined) {
          valueFromPxPositionLookupMap[width][step] = {};
        }
        if (valueFromPxPositionLookupMap[width][step][max] === undefined) {
          valueFromPxPositionLookupMap[width][step][max] = {};
        }
        if (valueFromPxPositionLookupMap[width][step][max][min]=== undefined) {
          valueFromPxPositionLookupMap[width][step][max][min] = {};
        }
        if (valueFromPxPositionLookupMap[width][step][max][min][pxPosition] === undefined) {
          valueFromPxPositionLookupMap[width][step][max][min][pxPosition] = {};
        }
        valueFromPxPositionLookupMap[width][step][max][min][pxPosition] = value;
      }
    };
    
    var getValueFromPxPositionHash = function(pxPosition) {
      var min = 50,
          max = 1000,
          step = 1,
          width = 300;
    
      var hash = pxPosition + '-' + min + '-' + max + '-' + step + '-' + width;
    
      return valueFromPxPositionLookupHash[hash];
    };
    
    var getValueFromPxPositionMap = function(pxPosition) {
      var min = 50,
          max = 1000,
          step = 1,
          width = 300;
    
      return valueFromPxPositionLookupMap[width][step][max][min][pxPosition];
    };
    
    var getValueFromPxPosition = function(pxPosition) {
      return valueFromPxPositionLookup[pxPosition];
    };
    
    var getValueFromPxPositionGo = function(pxPosition) {
      var min = 50,
          max = 1000,
          step = 1,
          width = 300;
    
      var value = Math.round(
        (min + (pxPosition / width) * (max - min)) / step
      ) * step;
    
      if (value < min) {
        value = min;
      } else if (value > max) {
        value = max;
      }
      
      return value;
    };
    
    populateValueFromPxPositionLookupHash();
    populateValueFromPxPositionLookup();
    populateValueFromPxPositionMap();

Test runner

Ready to run.

Testing in
TestOps/sec
With hash
for (var y = 0; y < 300; y++) {
  getValueFromPxPositionHash(y);
}
ready
Without hash
for (var y = 0; y < 300; y++) {
  getValueFromPxPosition(y);
}
ready
On the go
for (var y = 0; y < 300; y++) {
  getValueFromPxPositionGo(y);
}
ready
map
for (var y = 0; y < 300; y++) {
  getValueFromPxPositionMap(y);
}
ready

Revisions

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