Skip to content

Latest commit

 

History

History
63 lines (34 loc) · 1.78 KB

File metadata and controls

63 lines (34 loc) · 1.78 KB

设计初衷

做单页应用的时候,发现使用了太多的settimeout和setInterval。

然后,就会想,是不是可以抽离一个公用定时程序用来管理这些定时应用?

其实就是页面跑一个定时,然后每次增加定时时,直接往上面注册。

核心思想

维护一个定时队列,每次启动时,循环遍历定时队列,遇到需要执行的则执行。

实现

Class

实例:Crontab(interval, error)

  • interval指的是这个定时程序,间隔时间,单位为毫秒ms,默认400(有待商洽是否合适)
  • error指的是容错机制,比如,我需要再1100开始执行,但是现在的间隔是1000,那么也可以执行。

getInstance()

获取当前Crontab的一个实例,取的是最后一个Crontab实例,如果当前没有,则默认传教一个。

这样做主要是为了全局调用时,不用关心具体是哪个实例可用。

Method

on(time, fn[, context])

定时程序注册方法

  • time 指代的时间,单位为毫秒ms
  • fn 指代的具体执行函数。
  • context 指的是执行上下文。

one(time, fn[, context])

对应的注册一次的方法

off([id])

清除特定定时应用,如果id为空则清除全部定时应用。

start

启动定时应用。默认new Crontab()时就自动启动。

stop

停止当前定时应用。

setInterval

重新设置定时间隔

一定定时间隔改变,将依次执行:stop, start

几个问题

  • 每次定时的间隔是? 所谓的每次定时,即为最小间隔时间。统一处理的情况下,一个程序执行时间延误大于这个间隔时间的可能行很大。
  • 准确性?因为javascript单线程方式,所以它本身的定时机制就不能完全保证它的可靠性。