gpt4 book ai didi

javascript - 防止用户在多个选项卡中运行相同的 javascript 调用的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-30 15:15:50 24 4
gpt4 key购买 nike

我有一个通知系统,通过一个名为notification-refresh.php 的文件处理AJAX 请求,该文件返回一个JSON 对象 带有新通知 - 如果它存在。所以每个用户调用这个文件来向浏览器推送通知。一切都很好,直到每个用户开始打开很多选项卡。每个选项卡以 3 秒的间隔请求该文件。请求的数量使服务器重载,我们暂时禁用了保存系统的功能。

那么,你们能帮帮我吗?我不知道这是否可行,我寻找其他方法来仅使用 javascriptPHP 来构建通知系统,但没有成功。

有没有办法阻止用户在多个选项卡中运行相同的 javascript 调用?也许停止隐藏选项卡中的刷新...

PS:这不是服务器端问题。即使我们禁用了通知功能,微小请求的数量也会重载。

编辑:最终代码

你们都帮了我很多,我找到了一个快速的解决方案来解决我的问题。我将把代码留在这里,因为它可以在将来(或不)帮助人们。

开始前的小事:

  • 有一个名为canRefresh 的全局变量,负责允许或拒绝访问refresh() 函数;
  • 你不需要像我那样做一个额外的功能,因为你可以通过一次调用获得选项卡焦点状态:document.hasFocus(),但如果你假装使用,建议这样做它在您代码的不同部分;
  • 抱歉,我无法向您展示完整的代码。

    function check() {

    if(document.hasFocus() == canRefresh)

    return;

    canRefresh = !canRefresh;

    }

有效!再次感谢大家!

最佳答案

使用事件 onfocus()onblur() 检查此选项卡是事件的还是非事件的。如果它是事件的(重点),您立即调用通知刷新器,否则,停止向服务器调用请求。

var canCallRequest=true;
function refresh(){
if(!canCallRequest) return;
//request here...
};
window.onfocus = function () {
canCallRequest= true;
refresh();
};

window.onblur = function () {
canCallRequest = false;
};

关于javascript - 防止用户在多个选项卡中运行相同的 javascript 调用的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44476909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com