https://github.com/cuixiaorui/high-performance-timer
高性能的定时器
https://github.com/cuixiaorui/high-performance-timer
Last synced: 3 months ago
JSON representation
高性能的定时器
- Host: GitHub
- URL: https://github.com/cuixiaorui/high-performance-timer
- Owner: cuixiaorui
- Created: 2019-07-30T11:30:59.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2023-01-04T05:47:21.000Z (over 2 years ago)
- Last Synced: 2025-02-24T11:05:40.235Z (3 months ago)
- Language: JavaScript
- Size: 676 KB
- Stars: 2
- Watchers: 1
- Forks: 1
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Welcome to high-performance-timer 👋
> 高性能的定时器
使用 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)_