Захват времени реакции с использованием Javascript, проблемы точности

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

Мы уже определились с Javascript, и мы готовы наложить некоторые ограничения на пользователей, то есть исключить IE и т. Д. Мы не можем полностью запретить Windows.

Я прочитал пост Джона Резига на эту тему, и в соответствии с этим нам придется заблокировать все браузеры в Windows, кроме Firefox и Chrome.

Кроме того, этот ответ советует использовать console.time(); как лучшая практика для FF и Chrome.

У меня есть несколько дополнительных вопросов, учитывая, что посту Ресига уже 4 года, и что вопрос выше касается измерения времени выполнения функции (это означает, что выполнение кода с перекосом таймера хорошо, а не плохо, как в нашем случае), и не об исследовании времени реакции.

Следующий аналогичный вопрос только что задал вопрос о "лучшем веб-языке" и получил только общую рекомендацию использовать JS (именно это сделали несколько опубликованных исследований, но они не публикуют технические подробности).

  1. Можем ли мы как-то использовать лучшую точность console.time() где доступно? Я думаю, что нет, потому что он возвращается только к консоли, то есть он не может быть записан в переменной.
  2. Были ли какие-либо существенные изменения в точности синхронизации за последние 4 года? Мне удобно запретить IE по многим причинам, но, возможно, что-то изменилось для Safari и Opera на Windows?
  3. Должен ли я использовать второй метод, который связан с процессом выполнения, чтобы получить другой набор времени для сравнения / перекрестной проверки?

2 ответа

Решение

ObDisclaimer - я писал такие программы для исследовательского отдела университета.

Ты можешь использовать performance.now() (или же performance.webkitNow()в зависимости от версии браузера), чтобы получить более точную временную метку, чем Date.now(), Смотрите здесь для более подробной информации.

Однако следует учитывать одну проблему - обновление экрана. Предполагая частоту обновления 60 Гц, может быть разница в 16 мс, когда изображение фактически появляется на экране, в зависимости от:

  1. синхронизируется ли программное обеспечение с частотой обновления экрана (невозможно в JS, AFAIK), и
  2. где изображение и точечный зонд относятся к верхней части экрана - пиксели, нарисованные в верхней части экрана, отрисовываются раньше тех, которые находятся под ними.

Также следует учитывать эффекты, вызванные такими вещами, как интервалы сканирования клавиатуры. В одном проекте исследователь обнаружил значительные группировки вокруг периодов, которые были (по памяти, это 20 лет назад) кратными 30 мс или около того, что, по-видимому, было связано с тем, как часто сканировалась клавиатура на предмет нажатия клавиш на КПК Psion используется для испытаний.

В этом случае я решил проблему, построив аппаратный "блок кнопок" с использованием микроконтроллера PIC, который мог отправлять последовательный байт со скоростью 9600 бит / с без задержки сканирования и <2 мс, чтобы получить нажатие клавиши от блока до КПК.

Я собирался написать статью о проблемах, связанных с обновлением экрана. Тогда я получил настоящую работу;-) Я не знаю, изучал ли кто-нибудь еще это.

Недавно была хорошая статья на эту тему от Stian Reimers & Neil Stewart.

Точность представления и времени отклика в веб-экспериментах Adobe Flash и HTML5/JavaScript http://www.ncbi.nlm.nih.gov/pubmed/24903687

Другие вопросы по тегам