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