做单页应用的时候,发现使用了太多的settimeout和setInterval。
然后,就会想,是不是可以抽离一个公用定时程序用来管理这些定时应用?
其实就是页面跑一个定时,然后每次增加定时时,直接往上面注册。
维护一个定时队列,每次启动时,循环遍历定时队列,遇到需要执行的则执行。
实例:Crontab(interval, error)
interval指的是这个定时程序,间隔时间,单位为毫秒ms,默认400(有待商洽是否合适)error指的是容错机制,比如,我需要再1100开始执行,但是现在的间隔是1000,那么也可以执行。
获取当前Crontab的一个实例,取的是最后一个Crontab实例,如果当前没有,则默认传教一个。
这样做主要是为了全局调用时,不用关心具体是哪个实例可用。
定时程序注册方法
- time 指代的时间,单位为毫秒ms
- fn 指代的具体执行函数。
- context 指的是执行上下文。
对应的注册一次的方法
清除特定定时应用,如果id为空则清除全部定时应用。
启动定时应用。默认new Crontab()时就自动启动。
停止当前定时应用。
重新设置定时间隔
一定定时间隔改变,将依次执行:stop, start
- 每次定时的间隔是? 所谓的每次定时,即为最小间隔时间。统一处理的情况下,一个程序执行时间延误大于这个间隔时间的可能行很大。
- 准确性?因为javascript单线程方式,所以它本身的定时机制就不能完全保证它的可靠性。