Захват времени реакции с использованием Javascript, проблемы точности
Я создаю задачу с точечным зондом (люди должны быстро реагировать на точку после исчезновения изображения), и нам нужно измерить время реакции и показать стимулы в течение предварительно определенных интервалов для использования в онлайн-исследовании терапии.
Мы уже определились с Javascript, и мы готовы наложить некоторые ограничения на пользователей, то есть исключить IE и т. Д. Мы не можем полностью запретить Windows.
Я прочитал пост Джона Резига на эту тему, и в соответствии с этим нам придется заблокировать все браузеры в Windows, кроме Firefox и Chrome.
Кроме того, этот ответ советует использовать console.time();
как лучшая практика для FF и Chrome.
У меня есть несколько дополнительных вопросов, учитывая, что посту Ресига уже 4 года, и что вопрос выше касается измерения времени выполнения функции (это означает, что выполнение кода с перекосом таймера хорошо, а не плохо, как в нашем случае), и не об исследовании времени реакции.
Следующий аналогичный вопрос только что задал вопрос о "лучшем веб-языке" и получил только общую рекомендацию использовать JS (именно это сделали несколько опубликованных исследований, но они не публикуют технические подробности).
- Можем ли мы как-то использовать лучшую точность
console.time()
где доступно? Я думаю, что нет, потому что он возвращается только к консоли, то есть он не может быть записан в переменной. - Были ли какие-либо существенные изменения в точности синхронизации за последние 4 года? Мне удобно запретить IE по многим причинам, но, возможно, что-то изменилось для Safari и Opera на Windows?
- Должен ли я использовать второй метод, который связан с процессом выполнения, чтобы получить другой набор времени для сравнения / перекрестной проверки?
2 ответа
ObDisclaimer - я писал такие программы для исследовательского отдела университета.
Ты можешь использовать performance.now()
(или же performance.webkitNow()
в зависимости от версии браузера), чтобы получить более точную временную метку, чем Date.now()
, Смотрите здесь для более подробной информации.
Однако следует учитывать одну проблему - обновление экрана. Предполагая частоту обновления 60 Гц, может быть разница в 16 мс, когда изображение фактически появляется на экране, в зависимости от:
- синхронизируется ли программное обеспечение с частотой обновления экрана (невозможно в JS, AFAIK), и
- где изображение и точечный зонд относятся к верхней части экрана - пиксели, нарисованные в верхней части экрана, отрисовываются раньше тех, которые находятся под ними.
Также следует учитывать эффекты, вызванные такими вещами, как интервалы сканирования клавиатуры. В одном проекте исследователь обнаружил значительные группировки вокруг периодов, которые были (по памяти, это 20 лет назад) кратными 30 мс или около того, что, по-видимому, было связано с тем, как часто сканировалась клавиатура на предмет нажатия клавиш на КПК Psion используется для испытаний.
В этом случае я решил проблему, построив аппаратный "блок кнопок" с использованием микроконтроллера PIC, который мог отправлять последовательный байт со скоростью 9600 бит / с без задержки сканирования и <2 мс, чтобы получить нажатие клавиши от блока до КПК.
Я собирался написать статью о проблемах, связанных с обновлением экрана. Тогда я получил настоящую работу;-) Я не знаю, изучал ли кто-нибудь еще это.
Недавно была хорошая статья на эту тему от Stian Reimers & Neil Stewart.
Точность представления и времени отклика в веб-экспериментах Adobe Flash и HTML5/JavaScript http://www.ncbi.nlm.nih.gov/pubmed/24903687