JSFiddle - React, Tailwind, and code Playground
by svtux
HTML
<input id="numberTests" type="text" placeholder="количество испытаний">
<input id="numberLines" type="text" placeholder="количество строк">
<input id="numberException" type="text" placeholder="количество исключений">
<input id="startTest" type="button" value="Начать тест">
<div id="progress">Прогресс выполнения тестов: <span>0/0</span></div>
<div id="benchLastTest">Время выполнения последнего теста: <span>..?</span></div>
<div id="benchIfCondition">Среднее время для IF-ELSE: <span>..?</span></div>
<div id="benchTryCatch">Срендее время для TRY-CATCH: <span>..?</span></div>
<div id="info">Текущее состояние: <span>тест не начат</span>.</div>
JavaScript
var testFlag = 0;
document.querySelector('#startTest').addEventListener('click', benchmark, false);
function benchmark() {
if (testFlag) {
stopTest(true);
}
var m = parseInt(document.querySelector('#numberTests').value);
var num = parseInt(document.querySelector('#numberLines').value);
var ex = parseFloat(document.querySelector('#numberException').value);
if (isNaN(num) || isNaN(ex) || num < 1 || ex <= 0) {
info('не заданы параметры, тест не может быть начат');
return;
}
startTest();
var tt = new Array(num);
var kX = 100 / ex;
for (var i = 0; i < tt.length; i++) {
if (i % kX == 0) {
tt[i] = i;
} else {
tt[i] = '' + i;
}
}
if (!m || isNaN(m)) {
m = 1;
}
var t1 = t2 = 0;
setProgress(0, m);
for (var k = 0; k < m; k++) {
var date = new Date();
testIfCondition(tt);
var dT = new Date() - date;
t1 += dT;
setBenchLastTest(dT);
date = new Date();
testTryCatch(tt);
dT = new Date() - date;
t2 += dT;
setBenchLastTest(dT);
setProgress(k + 1, m);
if (!testFlag) break;
}
document.querySelector('#benchIfCondition span').innerHTML = t1 / m;
document.querySelector('#benchTryCatch span').innerHTML = t2 / m;
stopTest();
}
function testIfCondition(tt) {
for (var j = 0; j < tt.length; j++) {
if (typeof tt[j] == 'string') {
tt[j].toLowerCase();
}
}
}
function testTryCatch(tt) {
for (var j = 0; j < tt.length; j++) {
try {
tt[j].toLowerCase();
} catch(e) {
//
}
}
}
function setProgress(i, total) {
document.querySelector('#progress span').innerHTML = i + " / " + total;
}
function setBenchLastTest(t) {
document.querySelector('#benchLastTest...