【问题标题】:Resuming JS timer on accidental power failure意外断电恢复 JS 定时器
【发布时间】:2012-09-03 20:19:25
【问题描述】:

我正在制作一个在线测验应用程序,它有一个通过 JavaScript 实现的计时器。如果不小心,浏览器因断电而关闭,我打算从浏览器关闭的时间点恢复计时器。现在,我只在使用 PHP/AJAX 的数据库中记录测验结束时的时间。如何从用户关闭浏览器的确切时间恢复?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    停电的问题是不会提前通知您停电,因此无法在停电时保存状态。

    因此,了解何时断电的唯一方法是每隔 N 时间间隔连续保存状态。然后,当电源熄灭并恢复时,您可以查看上次保存的状态。它不会是完美的,但会是你能做到的最好的。

    您保存状态的三个选项是:

    1. 每分钟设置一个 cookie(或在其中包含运行时间计数的某个时间段)。
    2. 将相同的状态保存到本地存储(较新的浏览器)。
    3. 使用常规 ajax 调用(每隔几分钟)将运行时间“自动保存”到您的服务器。

    选项 1 和 2 的优点是它都是客户端的,因此保存速度很快并且不会加载您的服务器。选项 1 和 2 的缺点是它们可能会被试图操纵系统的客户端操纵。

    即使是选项 1 和 2 中的本地状态也可能在断电时无法正确保存,但据我所知,大多数浏览器在保存时都会将其保存到磁盘上,这样即使浏览器也能可靠保存后来崩溃了。

    【讨论】:

      【解决方案2】:

      您可以订阅窗口卸载事件,但我不能 100% 确定它会在电源故障关闭时触发。

      也许更好的解决方案是在测验过程中通过setInterval 轮询用户,该setInterval 可以每 1000 毫秒(或无论多么频繁)触发并设置/更新 cookie。

      【讨论】:

      • 您不会在电源故障时获得窗口卸载事件。
      • 不,断电时不会触发卸载。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 2011-10-28
      相关资源
      最近更新 更多