Benchmark - Integer Validation
RegExp vs Number + parseInt
by Jason Butz
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/benchmark/2.1.4/benchmark.min.js"></script>
<button id="runSuite">
Run Suite
</button>
JavaScript
function logOutput(outputMessage) {
console.log(outputMessage);
let el = document.createElement('p');
el.innerText = outputMessage;
document.body.appendChild(el);
}
var suite = new Benchmark.Suite;
// Setup Values
var inputValue = '10';
// Add Tests
suite
.add('RegExp', function() {
(inputValue.toString().match(/^([-]{0,1})(\d+)$/) != null);
})
.add('Number + parseInt', function() {
(Number(inputValue) === parseInt(inputValue, 10));
})
// Add Listeners
.on('start', function() {
logOutput('Suite Started')
})
.on('cycle', function(event) {
logOutput(String(event.target));
})
.on('complete', function() {
let fastest = this.filter('fastest');
let fastestHz = fastest.map('hz')[0];
logOutput('Fastest is ' + fastest.map('name'));
this.each((test) => {
if(test.name !== fastest.map('name')[0]) {
let hz = test.hz;
let perc = (1 - (hz / fastestHz)) * 100;
logOutput(`${test.name} is ${perc < 1 ? perc.toFixed(2) : Math.round(perc)}% slower`);
}
});
document.getElementById('runSuite').disabled = false;
})
document.getElementById('runSuite').addEventListener('click', function() {
this.disabled = true;
suite.run({ 'async': true });
});