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...