[英]Performance issues with using localStorage / sessionStorage?
我试图检测用户在一段时间内不活动,并根据它需要执行某些操作。
我为此使用 localStorage,以便我在所有打开的选项卡中设置空闲时间开始。
下面是我的代码的相关部分
const detect = () => {
//console.log(`time is ${idleStartTime}`);
if(Date.now() - getIdleStartTime() > ONE_HOUR){
console.log('idle time more than one hour....');
console.log(`${getIdleStartTime()} ended`);
alert('idle time more than one hour....');
} else {
idleAnimationFrameId = requestAnimationFrame(function() {
detect();
});
}
};
const startTimer = () => {
idleAnimationFrameId = requestAnimationFrame(function() {
detect();
});
};
function setIdleStartTime() {
return new Promise((resolve, reject) => {
if (storageAvailable('localStorage')) {
// Yippee!
localStorage.setItem('idleStartTime', Date.now());
console.log('idle time has been set...');
resolve(true);
}
else {
// Too bad, no localStorage for us
console.log('no local storage support...');
reject('no local storage support.')
}
});
}
如果通过列出以下事件,我将用户标记为活动。 ['mousedown', 'mousemove', 'keydown', 'scroll', 'touchstart'];
function setEventListners() {
activityEvents.forEach(function(eventName) {
document.addEventListener(eventName, activity, true);
});
}
function activity() {
console.log('user activity detected...');
localStorage.setItem('idleStartTime', Date.now());
}
我看到在某些情况下,有 1.5K 请求在很短的时间内发送到 localstorage 以设置该值。 我看到user activity detected...
在几秒钟内在控制台上打印了大约 1.5k 次。
我的几个问题是
当我在 localStorage 中设置idleStartTime
值时会出现任何性能问题,并且本地存储集将在几秒钟内被调用数千次。
有没有比在我的场景中使用 localStorage 更好的警报器。
谢谢。
问题 1 的回答
不会有内存限制问题,因为每次调用localStorage.setItem
,都会覆盖之前的值。 但是您提到您的活动更改在很短的时间内触发了 1.5K 次。 这将增加磁盘使用(I/O)时间。
问题 2 的回答
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.