2014-01-23 4 views
4

Я всегда думал, что временная метка, используемая requestAnimationFrame, такая же, как обычная временная метка в JavaScript, то есть число миллисекунд с 1 января 1970 года. Сегодня я взял отметки времени для проверки и установил, что временная метка RAF, вероятно, измеряется с тех пор, как начало загрузки страницы. Каковы точно измеренные временные метки?requestAnimationFrame: что такое метка времени?

Тест код:

<p id="output"></p> 

var i = 0; 
var start = null; 
var times = []; 
var dur = 5000; 

function step(timestamp) { 
if (start===null) start = timestamp; 
times[i++] = timestamp; 
if (timestamp-start<=dur) { 
    requestAnimationFrame(step); 
} else { 
    document.getElementById('output').innerHTML = times.join('<br>'); 
} 
} 

requestAnimationFrame(step); 

дает результаты, как это:

158.52126457412882 
183.12243595205535 
199.52116819316421 
... 

во всех RAF способных браузеров.

+0

Из [docs] (https://developer.mozilla.org/en-US/docs/Web/API/window.requestAnimationFrame): «Обратный вызов имеет один единственный аргумент, [' DOMHighResTimeStamp'] (https : //developer.mozilla.org/en-US/docs/Web/API/DOMHighResTimeStamp), который указывает текущее время, когда requestAnimationFrame начинает запускать обратные вызовы. " –

ответ

1

Наконец, я нашел ответ в статье Paul Irish и спецификации High времени Разрешение:

requestAnimationFrame API: now with sub-millisecond precision

Время rAF измеряется относительно начала навигации по документу, то есть относительно атрибута «navigationStart интерфейса PerformanceTiming».

7

Это DOMHighResTimeStamp или метка времени высокого разрешения (то же самое вы получаете с window.performance.now()).

время марка:

текущее время, когда requestAnimationFrame начинает стрелять обратных вызовов.

Основное различие между обычной и временной меткой высоким разрешением временной меткой является:

DOMTimeStamp имеет только точность миллисекунды, но DOMHighResTimeStamp имеет минимальную точность десяти микросекунд.

Примечание: некоторые браузеры еще не реализуют этот аспект rAF и могут дать вам ошибку или нет значения в качестве аргумента.

Некоторые ресурсы:

+0

«В случае rAF он начинает отсчитываться с момента использования rAF. Первая метка времени может быть нулевой». Это неправда. Попытайтесь добавить предупреждение («приостановлено») или так ПЕРЕД первым вызовом RAF. Блок предупреждений блокирует, и если вы нажмете его примерно на 5 секунд, первое значение в массиве времени будет около 5000 ... –

+0

@LeosOndra см. Обновление (у меня были более ошибочные реализации в разуме) – K3N

Смежные вопросы