背景:最近遇到1个项目,业务方调用了后端1个开销较大的接口,用于页面实时监控一些关键指标,页面是自动定时请求接口刷新数据,随着用户的增加,后端压力比较大,分析发现,很多用户日常使用过程中,并不是一直盯着屏幕看,有时候人离开了(比如下班),或者把监控页切到后台或最小化,干其它事去了,但是页面上的定时请求仍然在一直跑着,造成了相当一部分无用请求。

优化思路:当浏览器tab最小化,或切到后台时,停止自动刷新,等切回来时,再恢复自动刷新。

示例代码如下:

 1   <script>
2
3 let timer = setInterval(() => {
4 console.log("开始自动刷新(每5秒获取数据)...", new Date())
5 }, 5000)
6
7 console.log("timer1:", timer)
8
9 // 监听浏览器切换事件
10 document.addEventListener('visibilitychange', () => {
11 // 离开当前tab标签(不管是切到其它tab,还是最小化)
12 if (document.visibilityState === 'hidden') {
13 console.log("离开当前tab:停止自动刷新,clear timer:", timer)
14 clearInterval(timer)
15 timer = -1
16 } else {
17 // 回到当前tab标签
18 console.log("回到当前tab:")
19 //延时2秒后,恢复自动刷新
20 setTimeout(() => {
21 //判断上1次的timer是否已被清除
22 if (timer < 0) {
23 timer = setInterval(() => {
24 console.log("恢复自动刷新(每5秒获取数据)...", new Date())
25 }, 5000)
26 console.log("timer2:", timer)
27 }
28 }, 2000)
29 }
30 });
31 </script>

监控浏览器tab切换或最小化事件的更多相关文章

  1. 监听浏览器tab选项卡选中事件,点击浏览器tab标签页回调事件,浏览器tab切换监听事件

    js事件注册代码: <script> document.addEventListener('visibilitychange',function(){ //浏览器tab切换监听事件 if( ...

  2. Uipath 浏览器页面最大化和最小化

    文章来源东京IT青年前线http://www.rpatokyo.com/ Uipath 浏览器页面最大化和最小化   浏览器在关闭时会自动记忆上次浏览器关闭时窗口的小,下次再次会以同样的大小打开.机器 ...

  3. 监听浏览器tab切换

    监听浏览器切屏 为了完成验证用户在切换浏览器tab时进行登录再次认证需求需要监听浏览器切换窗口 if (document.hidden !== undefined) { document.addEve ...

  4. 【Delphi】最小化事件捕捉

    添加一个ApplicationEvents组件在窗体,然后处理其OnMinimize事件和OnRestore事件即可.

  5. (原创)如何搭建PLC+上位机监控系统达到成本的最小化?

    以西门子PLC举例; 西门子PLC有几个型号:S7-200SMART,S7-1200,S7-300,S7-400,S7-1500,价格从低到高. 1个项目中要求的IO数量:600点的DI+DO,若干个 ...

  6. C# 实现WinForm窗口最小化到系统托盘代码,并且判断左右鼠标的事件

    1.设置WinForm窗体属性showinTask=false 2.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标. 3.添加窗体最小 ...

  7. 浏览器,tab页显示隐藏的事件监听--页面可见性

    //监听浏览器tab切换,以便在tab切换之后,页面隐藏的时候,把弹幕停止 document.addEventListener('webkitvisibilitychange', function() ...

  8. C#编写最小化时隐藏为任务栏图标的 Window appllication.

    1.设置WinForm窗体属性showinTask=false 2.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标. 3.添加窗体最小 ...

  9. NotifyIcon 将窗口最小化到托盘

    1.设置窗体属性showinTask=false 2.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标. 3.添加窗体最小化事件(首先需 ...

  10. delphi模态窗体最小化会隐藏的问题

    在使用delphi创建模态窗体的时候最小化窗体会导致最小化的窗体不可见,再次点击主窗体才会显示. 在这个模态窗体中增加以下函数 procedure WmSysCommand(var msg: TMes ...

随机推荐

  1. 使用dtree制作一个简单的网站导航(后台管理)

    目录 效果展示(轻喷) dtree简介 涉及技术 目录结构 各个文件详情 index.html top.html left.html main.html cpright.html dtree下载地址 ...

  2. vue3 基础-API-watch 和 watchEffect

    前篇对 computed 属性如何在 api 中基本使用, 即从 vue 中引入, 然后通过直接传函数或者传对象的方式, 开箱即用, 非常清晰易懂. 本篇继续来对之前的 watch 进行扩展使用啦. ...

  3. RPC实战与核心原理之服务发现

    服务发现:到底是要CP还是AP? 回顾 "怎么设计一个灵活的 RPC 框架" 总结起来,就是怎么在 RPC 框架中应用插件,用插件方式构造一个基于微内核的 RPC 框架,其关键点就 ...

  4. 【公众号搬运】React-Native开发鸿蒙NEXT(4)

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  5. 如何实现本地大模型与MCP集成

    1.概述 本文将围绕构建兼具本地运行大型语言模型(LLM)与MCP 集成能力的 AI 驱动工具展开,为读者提供从原理到实践的全流程指南.通过深度整合本地大模型的隐私性.可控性优势与 MCP 工具的自动 ...

  6. 启智树提高组day4T3 T3(t3.cpp,1s,512MB)

    启智树提高组day4T3 T3(t3.cpp,1s,512MB) 题面描述 输入格式 输出格式 样例输入 样例输出 数据范围 题解 task1 暴力dfs 10分 Code 1 #include< ...

  7. 未来已来?vSphere 9 预览版部署体验

    最近看到不少技术爱好者开始分享 vSphere 9 的基础体验镜像,作为 VMware 的忠实粉丝,怎么能错过这波"尝鲜"机会呢? 趁着空闲时间,我也动手安装体验了一下.从初步使用 ...

  8. java原生链利用

    java原生链利用 在上一个文章中我们利用Java原生链进行shiro的无依赖利用; 针对在没有第三方库的时候,我们该如何进行java反序列化; 确实存在一条不依赖第三方库的java反序列化利用链;但 ...

  9. 阿里微服务解决方案-Alibaba Cloud之服务消费方(Feign)(四)

    一.创建服务消费方并集成OpenFeign 创建模块的方式与创建服务提供方的方式一致 目录结构如下 1.1 创建完项目后,加入 OpenFeign的依赖 在父工程的 pom.xml 文件中加入如下依赖 ...

  10. 复制REUSE_ALV_GRID_DISPLAY_LVC,给函数添加简易的F4处理能力

    翻遍REUSE_ALV_GRID_DISPLAY_LVC这个函数我们可以发现,这个函数里预定义了一些事件类型. 不过也缺少了一些类型,看看SLIS这个类型池就可以发现,ONF4事件是没有的. 为了把这 ...