准确测量用户交互时间

时间:2018-05-01 09:12:16

标签: javascript

我有一个申请表(使用c#/ web forms / Asp.Net构建)。

申请表是一种向导风格 - 5个部分 - 在它们之间分配了大约30个各种输入字段,然后是“下一个”。按钮移动到下一部分。

我想尝试准确衡量完成表单所需的时间。

显然,我可以使用Asp&#39; <iframe>并记录页面加载和最终按钮提交之间的时间段,但它不会完全准确。

它不准确的原因是因为用户可能会打断流程 - 也许他们会因为做其他事情而中断或者去寻找填写表格的信息。

所以我想做的是尽可能准确地表达。我知道这可能涉及javascript,因为表单只会在每个完整部分的末尾发回。

但是,javascript不是我的语言,因此我不确定最佳策略。我不是在寻找完整的解决方案,只是建议一种可行的方法来实现我所需要的。

3 个答案:

答案 0 :(得分:1)

这不是技术上的答案,而是“帮助你顺利完成”。

如果您希望在用户端使用本地存储,则可以使用本地存储。如果您需要未完成表单的结果,您还需要经常将信息发送到后端。

  1. 计算用户的访问ID
  2. 将开始日期时间添加到具有与之关联的ID的本地存储
  3. 经常(每5秒左右)更新本地存储中的结束时间
  4. 如果表单中断/用户断开连接:

    1. 如果用户回来,则计算新的访问ID
    2. 设置新访问ID的开始日期时间
    3. 设置新访问ID的结束日期时间
    4. 在表单完成时,计算这些迭代之间的时间。将它们全部添加起来,您就可以获得表单中用户操作的完整日志,包括用户何时断开连接的信息(您可能希望该信息检查表单是否正常工作)。

答案 1 :(得分:1)

假设以下结构:

<form class="eform">
  <input name="" />
  <input name="" />
  ...
  <input name="" />
</form>

您有几个选择 当用户开始填写表单?时,例如,当点击(将鼠标对准)任何表单输入时。
单击提交按钮后完成,或者更好的是,当该表单的提交事件被触发时:

var start=0, end;
$('.eform input').on('focus', function(e){
  start=Date.now()
})

$(document).on('submit','.eform', function(e){
   end=Date.now()-start;
   console.log("Seconds filling the form", parseFloat(end/1000).toFixed(2) )
});

答案 2 :(得分:0)

  • 设置触发录制的事件,&#34; mousemove&#34;,&#34;焦点&#34;和&#34;改变&#34;。在文档上听鼠标移动,在输入元素上听其他人。当他们开火时,将值存储在mydata={};
  • 在第一次开火时,存储{start:event.timeStamp,lastTriggered:event.timeStamp,accumulated:0}
  • 在接下来的连续调度中,不要再触摸起始字段,而是使用event.timeStamp更新lastTriggered,IF event.timeStamp - mydata.lastTriggered小于阈值(让我们说10000毫秒),然后将累计设置为mydata.accumulated += event.timeStamp - mydata.lastTriggered。最后,更新mydata.lastTriggered = event.timeStamp
  • on submit stringify mydata并发送到服务器