2015-02-23 7 views
2

Есть ли способ измерения латентности между , когда я нажимаю кнопку мыши и , когда установленная функция onmousedown срабатывает?Как измерить задержку между взаимодействием и событием mousedown в JavaScript?

Или, имеются ли в наличии текущие статистические данные об этой задержке?

Я предполагаю, что эти два события не являются одновременными и зависят от браузера.

До сих пор мой единственный подход заключался в создании нескольких событий onmousedown и измерении разницы во времени между ними с использованием Date. Я обнаружил до 6 мс разницу между ними.

Я работаю над аудио-приложениями, чувствительными к времени (до миллисекунд).

Любая помощь - это здорово, спасибо!

+0

Меня особенно интересуют настольные браузеры; Я знаю о задержке 300 мс в мобильных событиях, но это не то, что я пытаюсь измерить. – suncannon

+0

Использование JavaScript для чувствительных к времени функций не может быть вашим лучшим выбором. Я бы рекомендовал изучить другие инструменты с более определенными спецификациями для такого приложения. – Palpatim

+0

_ «Использование JavaScript для чувствительных к времени функций не может быть вашим лучшим выбором». _ Также помните, что ** JavaScript является однопоточным **. –

ответ

3

Возможно, вы ищете разницу между Event.timeStamp и текущей меткой времени, Date.now(). Они оба возвращают время, прошедшее с начала эпохи в миллисекундах:

JavaScript

document.getElementById("mydiv").addEventListener('click', function (e) { 
    // in milliseconds 
    var latency = Date.now() - e.timeStamp; 
}); 

Working example on JSFiddle.

Вычитая первое из последнего - , как вы можете увидеть в прилагаемом фрагменте - вы можете измерить задержку.

К сожалению, событие timeStamp не является фактическим аппаратным моментом, когда была нажата мышь, но, когда браузер получил событие click из вашей ОС. Это, однако, всегда происходит до вызова обработчика события и должно иметь незначительную задержку.

Что касается связанной скрипты, разница во времени для меня составляет менее 1 мсек в большинстве случаев; Мне иногда удалось достичь значений выше 10 мс безжалостной разборки кнопок и перезагрузки страницы, но это не распространено. Конечно, если вы выполняете более интенсивные вычислительные задачи в обработчиках событий, разница может легко подняться, и в этом случае компенсация латентности может быстро стать важной частью.

+1

Очень хорошее приложение для '.timeStamp'! – Bergi