Fingerprintjs2's performance test

jsPerf is down :-(

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script>
<script src="https://rawgit.com/Valve/fingerprintjs2/master/fingerprint2.js"></script>
<script src="https://rawgit.com/bestiejs/benchmark.js/2.1.0/benchmark.js"></script>
<div id="result">
  (placeholder for results)
</div>

CSS

#result {
  white-space: pre;
  font-size: 11px;
  font-family: Arial, Helvetica, Sans-Serif;
}

JavaScript

const suite = new Benchmark.Suite;
const resultDOM = document.getElementById("result");

const detectability = {
  excludeUserAgent: true,
  excludeLanguage: true,
  excludeColorDepth: true,
  excludeScreenResolution: true,
  excludeAvailableScreenResolution: true,
  excludeTimezoneOffset: true,
  excludeSessionStorage: true,
  excludeIndexedDB: true,
  excludeAddBehavior: true,
  excludeOpenDatabase: true,
  excludeCpuClass: true,
  excludePlatform: true,
  excludeDoNotTrack: true,
  excludeHasLiedLanguages: true,
  excludeHasLiedResolution: true,
  excludeHasLiedOs: true,
  excludeHasLiedBrowser: true,
  excludeFlashFonts: true,
  excludePlugins: true,
  excludeIEPlugins: true,
  excludeTouchSupport: true,
  excludeAdBlock: true,
  excludeJsFonts: true,
  excludeWebGL: true,
  excludeCanvas: true
};

function generateTestOptions(detectionOptions) {
  return {
    defer: true,
    async: false,
    count: 1,
    cycles: 1,
    delay: 0,
    minSamples: 50,
    //minTime: 1,
    //maxTime: 5,
    fn: (deferred) => {
      new Fingerprint2(Object.assign(detectionOptions)).get(hash => {
        deferred.resolve();
      });
    }
  }
}

suite.add("Specimen", generateTestOptions(detectability));

for (let value of Object.keys(detectability)) {
  var options = Object.assign({}, detectability);

  options[value] = false;

  suite.add(value.replace("exclude", ""), generateTestOptions(options));
}

suite
  .on('start', (event) => {
    resultDOM.innerText = "";
  })
  .on('cycle', (event) => {
    resultDOM.innerText += String(event.target) + "\r\n";
  })
  .on("complete", function() {
    let results = Array.from(this);

    results.sort((a, b) => {
      if (a.name === "Specimen") {
        return -1;
      }

      return (b.hz - a.hz)
    });

    resultDOM.innerText += "\r\n";

    let specimen = results.shift();

    for (var prop in results) {
      let task = results[prop];
      let difference = -(100 - (task.hz / specimen.hz) * 100).toFixed(2);

      if...