An open API service indexing awesome lists of open source software.

https://github.com/cuixiaorui/high-performance-timer

高性能的定时器
https://github.com/cuixiaorui/high-performance-timer

Last synced: 3 months ago
JSON representation

高性能的定时器

Awesome Lists containing this project

README

        

Welcome to high-performance-timer 👋



Version

Documentation


Maintenance


License: MIT

> 高性能的定时器

使用 heap 实现的高性能的定时器,时间复杂度为 O(logn)

### 🏠 [Homepage](https://github.com/cuixiaorui/high-performance-timer)

## Install

```sh
npm install high-performance-timer
```

## Usage

默认排序规则是基于 date 对象的 getTime() 来排序处理

```js
let timer = new Timer();
timer.set("1", {
// 日期必须是未来的
date: new Date("2019-08-01 15:45:00"),
cb() {
console.log("date:1");
}
});

timer.set("2", {
// 日期必须是未来的
date: new Date("2019-08-01 15:45:30"),
cb() {
console.log("date:2");
}
});
timer.set("3", {
// 日期必须是未来的
date: new Date("2019-08-01 15:46:00"),
cb() {
console.log("date:3");
}
});
// date:1 date:2 date:3
```

用户也可以自定义排序规则和获取 timeout 的规则

```js
// 自定义处理规则
let timer2 = new Timer({
// 排序规则 -> priority 小的先执行
comparisonHandler(dataA, dataB) {
return dataA.priority < dataB.priority;
},
// 获取timeout 的时间 data 为要执行的数据
getTimeoutHandler(data) {
return data.timeout;
}
});

timer2.set("1", {
timeout: 3000,
priority: 1,
cb() {
console.log("1");
}
});
timer2.set("2", {
timeout: 3000,
priority: 2,
cb() {
console.log("2");
}
});
timer2.set("3", {
timeout: 3000,
priority: 3,
cb() {
console.log("3");
}
});

// 1 2 3
```

## Options

### comparisonHandler(dataA,dataB)

堆排序的对比规则扩展字段,同 Array.sort()

### getTimeoutHandler(data)

data: 堆顶的元素
获取 timeout 的扩展字段

## API

### set(key,data)

设置任务,key 为唯一 id,当任务执行完毕后会自动删除。

```js
let timer = new Timer();
timer.set("1", {
// 日期必须是未来的
date: new Date("2019-08-01 15:45:00"),
cb() {
console.log("date:1");
}
});
```

### delete(key)

删除未执行的任务

```js
let timer = new Timer();
timer.set("1", {
// 日期必须是未来的
date: new Date("2019-08-01 15:45:00"),
cb() {
console.log("date:1");
// 任务 2 将不会执行
timer.delete("2");
}
});
timer.set("2", {
// 日期必须是未来的
date: new Date("2019-08-01 15:45:00"),
cb() {
console.log("date:2");
}
});
```

### clear()

清空所有未执行的任务

```js
let timer = new Timer();
timer.set("1", {
// 日期必须是未来的
date: new Date("2019-08-01 15:45:00"),
cb() {
console.log("date:1");
// 任务 2 将不会执行
timer.clear();
}
});
timer.set("2", {
// 日期必须是未来的
date: new Date("2019-08-01 15:45:00"),
cb() {
console.log("date:2");
}
});
```

## Run tests

```sh
npm run test
```

## Author

👤 **cuixiaorui**

- Github: [@cuixiaorui](https://github.com/cuixiaorui)

## 🤝 Contributing

Contributions, issues and feature requests are welcome!
Feel free to check [issues page](https://github.com/cuixiaorui/high-performance-timer/issues).

## Show your support

Give a ⭐️ if this project helped you!

## 📝 License

Copyright © 2019 [cuixiaorui](https://github.com/cuixiaorui).

This project is [MIT](https://github.com/cuixiaorui/high-performance-timer/blob/master/LICENSE) licensed.

---

_This README was generated with ❤️ by [readme-md-generator](https://github.com/kefranabg/readme-md-generator)_