最近做的项目,有个需求是每日指定时间去刷新页面,本想度娘一下,使用CV大法,发现基本没有,或者就是很繁琐的一套,或者就是使用 setInterval 、setTimeout 这种稍不注意,就内存溢出、崩溃的方式,并且时间也不精确,于是有了今天这一篇文章
思路
使用 web worker,不影响当前页面进程
使用 requestAnimationFrame 节省内存开销
废话不多说,上代码:
页面内使用:(此处为 vue 项目内使用)
const w = new Worker('./worker.js');
export default {
name: 'App',
created() {
w.postMessage('read');
w.addEventListener('message', (e) => {
if (e.data === 'reload') {
location.reload();
}
});
},
beforeDestroy() {
w.terminate();
}
};
worker.js 代码
let ing = false;
self.runTask = function () {
const _Date = new Date();
const year = _Date.getFullYear();
const month = _Date.getMonth() + 1;
const date = _Date.getDate();
const reloadTime = new Date(`${year}-${month}-${date} 00:00:00`).toLocaleString();
const curTime = new Date().toLocaleString();
if (reloadTime == curTime && !ing) {
ing = true;
self.postMessage('reload');
} else if (reloadTime != curTime) {
ing = false;
}
requestAnimationFrame(self.runTask)
}
self.addEventListener('message', e => {
if (e.data == 'read') {
self.runTask()
}
});
待办
此处代码为每天的凌晨00:00:00 执行一次刷新页面,目前是写在代码内的定时时间,可修改为配置参数,将定时时间作为参数传入