0

Какое минимальное значение в миллисекунд для setTimeout?

47

Я хочу использовать следующий код:

var minValue = 0;
if ( typeof callback == 'function' ) {
    setTimeout( callback, minValue );
}

при реализации функции обратного вызова в JavaScript.

Однако я столкнулся с проблемой: современные браузеры и некоторые старые браузеры имеют разные минимальные значения для таймаута.

Я знаю, что ноль не может быть минимальным значением.

Какое минимальное значение для setTimeout следует использовать для обеспечения совместимости с современными и старыми браузерами?

2 ответ(ов)

0

Минимальное время составляет 4 мс (по состоянию на HTML5) в современных браузерах; ранее оно составляло 10 мс. Обратите внимание, что эти цифры никогда не бывают на 100% точными.

0

В этой статье тестируются Firefox, Safari и Opera, а также строятся графики производительности:

http://ejohn.org/blog/analyzing-timer-performance/

Firefox 2, Opera и Safari имеют минимальное значение задержки в 10 мс.

Для старых браузеров вы можете провести тест, подобный тому, что описан в статье. Я только что выполнил тест, который у меня был ранее, используя setInterval с интервалом 10 мс в IE6, и получил среднее значение 55 мс. setTimeout, похоже, работает быстрее, со средним значением 35 мс.

Я провел тест в Chromium и получил среднее значение ~11 мс для тайм-аута 10 мс. Я попробовал с интервалами 4 мс и 1 мс и получил ~4.5 мс для обоих. Также имейте в виду, что результаты могут варьироваться между операционными системами.

Если вам интересно, вот код для теста:

<script>
// количество вызовов setTimeout перед расчетом среднего
var ITERATIONS = 200;

window.onload = function()
{
    testTimeout(10, +new Date, 0, 0);
}

// вызывает setTimeout повторно с указанным интервалом, отслеживая время,
// прошедшее между последовательными вызовами
function testTimeout(interval, last, sum, ii)
{
    var time = +new Date;
    var difference = time - last;
    sum += difference;
    if (ii % ITERATIONS == 1)
    {
        document.body.innerHTML = sum / ITERATIONS;
        sum = 0;
    }
    window.setTimeout(
        function() {
            testTimeout(interval, time, sum, ii + 1)
        }, interval);
}
</script>

Этот код позволит вам протестировать производительность таймеров в вашем браузере.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь