JavaScript 中非常短的图像演示的精确时间

Precise timing of very short image presentations in JavaScript

我正在 JavaScript 创建一个在线心理学实验,目的是研究人们快速识别图像的能力(此 RSVP,快速序列视觉呈现,范式是心理物理学中用于隔离前馈的常用方法,视觉处理的预注意阶段)。我的目标是在短时间内显示一系列图像(例如 30 毫秒、50 毫秒、70 毫秒等)。为了获得有效的结果,尽可能精确地获取演示时间非常重要。通常,这是在实验室中使用专门的软件或设备完成的,但这种设置不适合我。我认识到在浏览器中进行此实验时不可避免会出现一些溢出现象,但我希望 (A) 尽可能减少它,并且 (B) 尽可能量化实际发生的不精确。

现在,我正在预加载图像,并使用 setTimeout() 来控制刺激持续时间。我假设实验参与者将使用各种显示器(因此刷新率可能不同)和浏览器。

肉眼看来,我当前方法的图像时间似乎是错误的,尤其是变化很大。这与我读到的内容一致,即简短演示时间的可变性可能很高。

JavaScript是否有工具可以更精确地控制时间?此外,是否有工具可以 measure/estimate 图像实际显示在屏幕上的时间?最后,还有其他我应该看的选项吗?将图像序列编译成视频、gif 等?

setTimeout 未指定何时应执行操作。它只声明一旦计时器到期就应该采取行动;但无法保证 确切 事件将发生 (https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout)。

在进行(心理)实验时,并且当您无法控制参与者的环境时,我会争辩(除了在这种情况下不接受这种不受控制的环境之外)声明用户正在使用的整个选项卡(在显示图像时有效地阻止任何交互)或者,正如您自己提到的那样,使用动画 gif 或图像序列。

或者您可以监控并存储图像实际显示给参与者的时间(使用检查图像何时进入 viewport),并将该时间戳与参与者的交互进行比较。这可能会给出最有效的结果,因为它将消除 setTimeout.

的不可预测性