reactjs - 当 Chrome 选项卡处于非活动状态时,内存堆会增加
问题描述
使用 React 和 HighCharts 构建仪表板,使用 setInterval 每 10 秒刷新一次。
- 当浏览器选项卡处于活动状态时,没有内存堆问题。
- 当浏览器选项卡处于非活动状态时,内存堆会不断增加。
- 当打开备份选项卡时,内存堆会立即下降。
真正的问题是,我的Web应用程序会冻结,当TAB不活动时间太长时。
内存堆截图:
更新:
看起来这是问题所在:
https://developers.google.com/web/updates/2017/03/background_tabs
requestAnimationFrame()
当标签不活动时,Chrome不会致电。
人们如何解决这个问题?
解决方案
如果看不到仪表板,则确实不需要更新它。如果 chrome 有这个问题,我建议在它处于非活动状态后重新聚焦一次。在不活动的情况下,只需在间隔中的每个循环都不做任何事情。
var IsFocused = true;
window.onfocus = function() {
IsFocused = true;
}
window.onblur = function() {
IsFocused = false;
}
var myinterval = setInterval(function() {
if(!IsFocused) return;
some dashboard update code here...
}, 10000);
现在,如果问题只是在选项卡处于非活动状态时间隔甚至在运行,您也可以这样做:
var myinterval;
function StartInterval() {
clearInterval(myinterval);
myinterval = setInterval(function() {
some dashboard update code here...
}, 10000);
}
StartInterval(); //Start on first load.
window.onfocus = function() {
StartInterval();
}
window.onblur = function() {
clearInterval(myinterval);
}
推荐阅读
- vue.js - 变异用于不同组件的 Vuex 数组
- node.js - 为什么 axios 向我的 POST 路由发送空数据?
- java - 使用处理和 Opencv 进行像素化人脸跟踪
- flutter - 颤动中FlatButton之间的空间
- java - 内嵌图像显示为附件:JavaMail
- c# - 这个点“•”是否算作有效的 UTF8 字符?
- python - 使用 Django 存款金额
- r - 刻面尺寸增加的不同标记
- javascript - 来自 API 的 getScript() 包含 Json 块数据库后无法向 javascript 显示数据
- mysql - 显示类别和产品中的过滤器,显示过滤器相关的过滤器帖子选择(与活动父级不相关)和每个过滤器的产品计数