Предисловие: У меня есть демонстрационная версия проблемы на моем личном сайте (надеюсь, это нормально. Если нет, я могу попытаться настроить ее на jsfiddle).Я хочу, чтобы этот вопрос был немного забавным, и в то же время пытаюсь понять, как функции времени используют javascript.
Я увеличиваю значение индикаторов выполнения по таймауту.В идеале (если функции запускаются мгновенно) они должны заполнять с той же скоростью, но в реальном мире - нет.Код такой:
function setProgress(bar, myPer) {
bar.progressbar({ value: myPer })
.children('.ui-progressbar-value')
.html(myPer.toPrecision(3) + '%')
.attr('align', 'center');
myPer++;
if(myPer == 100) { myPer = 0; }
}
function moveProgress(bar, myPer, inc, delay){
setProgress(bar, myPer);
if(myPer >= 100) { myPer = 0; }
setTimeout(function() { moveProgress(bar, myPer+inc, inc, delay); }, delay);
}
$(function() {
moveProgress($(".progressBar#bar1"), 0, 1, 500);
moveProgress($(".progressBar#bar2"), 0, 1, 500);
moveProgress($(".progressBar#bar3"), 0, .1, 50);
moveProgress($(".progressBar#bar4"), 0, .01, 5);
});
Наивно можно подумать, что все должны работать (заполнять индикатор выполнения) с одинаковой скоростью.
Однако в первых двух барах (если мы называем «установка индикатора выполнения» одной операцией), я выполняю одну операцию каждые 500 мс, всего 500 операций для заполнения бара;в-третьих, я выполняю одну операцию каждые 50 мс, в общей сложности 5000 операций, чтобы заполнить планку;в четвертом я выполняю одну операцию каждые 5 мс, чтобы в общей сложности 50 000 операций заполнили планку.
Какая часть моего кода занимает больше всего времени, вызывает эти различия в скорости и может быть изменена по порядкучтобы заставить их функционировать так же, как они (четвертый столбец получает меньшие приращения), но также работать с той же скоростью?