Skip to content

Instantly share code, notes, and snippets.

@sokra
Last active January 4, 2018 09:48
Show Gist options
  • Save sokra/234c077e1299b7369461f1708519c392 to your computer and use it in GitHub Desktop.
Save sokra/234c077e1299b7369461f1708519c392 to your computer and use it in GitHub Desktop.
var Benchmark = require('benchmark');
var suite = new Benchmark.Suite;
var testArray = [];
for (var s = 0; s < 5000; s++) {
testArray.push(Math.floor(s * 0.1));
}
console.log('Testing used ids')
suite
.add('Map', () => benchMap(testArray))
.add('Set', () => benchSet(testArray))
.add('Native', () => benchNative(testArray))
.add('NativeTrue', () => benchNativeTrue(testArray))
.on('cycle', event => console.log(String(event.target)))
.on('complete', function() {console.log('Fastest is ' + this.filter('fastest').map('name'))})
.run({ 'async': true });
function benchMap(arr) {
var result = [];
var usedIds = new Map();
for(var i = 0; i < arr.length; i++) {
var item = arr[i];
usedIds.set(item, item);
}
for(var i = 0; i < 5500; i++) {
if(!usedIds.has(i))
result.push(i);
}
return result;
}
function benchSet(arr) {
var result = [];
var usedIds = new Set();
for(var i = 0; i < arr.length; i++) {
var item = arr[i];
usedIds.add(item);
}
for(var i = 0; i < 5500; i++) {
if(!usedIds.has(i))
result.push(i);
}
return result;
}
function benchNative(arr) {
var result = [];
var usedIds = Object.create(null);
for(var i = 0; i < arr.length; i++) {
var item = arr[i];
usedIds[item] = item;
}
for(var i = 0; i < 5500; i++) {
if(usedIds[i] !== i)
result.push(i);
}
return result;
}
function benchNativeTrue(arr) {
var result = [];
var usedIds = Object.create(null);
for(var i = 0; i < arr.length; i++) {
var item = arr[i];
usedIds[item] = true;
}
for(var i = 0; i < 5500; i++) {
if(!usedIds[i])
result.push(i);
}
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment