我们的网页中有几个页面是通过计时器刷新的,仍然有很多查询,这给服务器造成了很大的压力。这些接口已经尽可能优化了,所有能放入缓存的都放入了缓存。然后,主管提出了另一个要求,那就是我们使用的是layui多标签iframe框架,不在某个页面的iframe里面的时候不执行定时器。我认为这是一个非常好的建议,实施起来并不难。
大致考虑一下,有两种思路,一种是点击标签的时候启动或者关闭定时器,另一种是在定时器执行的时候判断iframe是否隐藏,如果隐藏了就不执行定时器。第一次维护比较麻烦,难免会有错误和遗漏,因为和其他iframe有关,所以不好。第二个逻辑很简单,只与定时器所在的iframe相关。虽然计时器一直在运行,但只要不执行里面的逻辑,减轻服务器的压力就很重要。
那么如何判断计时器所在的页面是否隐藏?
获取iframe元素的父元素,判断是否有layui-show类。
函数my interval (func,time) {console.log ('start timer ',func,time);//点击iframe对应的标签,直接执行timer方法。但是请注意,默认情况下,我只执行最后一个计时器方法。如果有多个定时器,请自行更换。顶部。$('李[lay-id='' $ (self。frameelement)。attr ('src')'']')。解除绑定(“单击”)。click(function(){ console . log(func,'方法调用');func . call();});返回set interval(function(){ console . log(' my interval timer call '));If ($ (self。frameelement。亲子关系)。has class(' layui-show '){//判断页面上是否显示console.log(func,' method call ');Console.log('计时器间隔'时间);func . call();} },时间);}以上控制运行在layui多iframe页面上的定时器的方法,都是边肖分享的内容。希望能给大家一个参考,多支持我们。