在意外断电时恢复JS计时器

Resuming JS timer on accidental power failure

本文关键字:JS 计时器 恢复 意外 断电      更新时间:2023-09-26

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

电源故障的问题是,您不会在停电之前收到通知,因此在电源故障时没有机会保存状态。

因此,知道何时停电的唯一方法是每N个时间间隔连续保存状态。 然后,当停电然后恢复时,您可以查看上次保存的状态。 它不会是完美的,但将是你能做的最好的。

保存状态的三个选项是:

  1. 每分钟设置一个 cookie(或包含运行时间计数的某个时间段(。
  2. 将相同的状态保存到本地存储(较新的浏览器(。
  3. 通过定期的 ajax 调用(每隔几分钟(将运行时间"自动保存"到服务器。

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

有一个

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

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

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