【问题标题】:Refreshing a page without constant refreshing [duplicate]刷新页面而不不断刷新[重复]
【发布时间】:2019-10-14 22:17:07
【问题描述】:

我目前正在为员工制作一个简单的时钟进出系统。仓库有一台电视机,右边是未登录人员的名单,左边是已登录人员的名单。当他们在楼下的扫描设备上打卡时,我需要电视/楼上的仪表板进行更新并将其名称移动到适当的一侧。

我已经制作了将详细信息记录到数据库中的功能。我知道我可以使用这样的代码:

<meta http-equiv="refresh" content="3;url=thecurrentpagesurl" />

这样做会刷新页面运行一个检查更改并相应更新显示的功能,但是我想知道是否有一种方法可以“侦听”更改而不必经常向服务器发送垃圾邮件。理想情况下,我希望仪表板实时更新。

使用元刷新我可以刷新页面,使用一个函数来检查数据库更改并相应地更新仪表板上的 html。有没有更省资源或更有效的方法来做到这一点?

(我不是 JavaScript 专家,但我有足够的了解可以在基本水平上使用一些)。

编辑

这个问题之前已经问过,我已经查看了其他答案,这就是为什么我得出关于元刷新方面的结论,但是我想知道在我的特定设置下是否有更有效的方法起来。

【问题讨论】:

  • 看看 websockets 或 longpolling。
  • AJAX 或 WebSockets 是您的主要选择。但实际上,人们实际上多久打卡一次?人们需要以多快的速度收到通知(即他们实际上对这些信息做了什么,如果他们不立即发现会有问题吗?)。我的意思是,你真的需要每 3 秒更新一次吗?对于所有实际目的,也许每隔几分钟(甚至更少)就可以了。如果是这样,那么您只需更改刷新命令的时间,“恒定”刷新问题就会消失,而无需学习任何新概念或编写任何新代码。
  • 视情况而定,这很简单而且有效,可能 3 秒有点短,设置为 60。我不会太担心服务器负载。
  • P.S.对于将来阅读的任何人,我们忘记在这里也提到服务器发送事件(SSE)作为一个选项,因为通信似乎只是单向的。

标签: javascript php


【解决方案1】:

在您描述的环境中,您当前的方法还不错。

如果需要,您可以阅读以下一些想法/选项并改进您的应用程序:

  • 使用 Ajax 并刷新列表的内容。您可以将其与简洁的动画结合起来。但这仍然不是实时的。这在使用 jQuery 或类似库时尤其容易。
  • 您可以使用 Ajax 和 longpolling,这意味着 Ajax-Request 将在服务器端保持打开状态,直到发生任何更改(或可能的超时)。当请求得到响应时,只需使用长轮询打开另一个 ajax 请求并等待更多更改。这不是实时的,但它非常接近实时。在某些环境中,这会给服务器带来压力,因为每个打开的请求都会占用资源或阻塞套接字/线程等。
  • 另一个更现代的版本是使用 Websockets。这是最复杂的方法,但通信是实时的。浏览器视图和服务器正在建立一个 tcp 连接并保持打开状态以通过它进行通信。还有一些很好的 Websocket 开源库。

在您描述的情况下,我会采用您当前的解决方案,并考虑前两个想法。它们并不复杂,可以给人一种“实时”更新的感觉。

【讨论】:

    【解决方案2】:

    我决定在设定的时间运行刷新,所以我所做的是使用 php date 函数来计算时间,如果时间在 7-9(最早的员工打卡)或 5-7(最晚的任何人打卡)它会以这种方式运行元刷新,当每个人都在工作时,它不会整天检查。再次感谢!

    【讨论】:

      猜你喜欢
      • 2011-12-22
      • 2011-04-28
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多