high-performance-timer

高性能的定时器

Usage no npm install needed!

<script type="module">
  import highPerformanceTimer from 'https://cdn.skypack.dev/high-performance-timer';
</script>

README

Welcome to high-performance-timer 👋

Version Documentation Maintenance License: MIT

高性能的定时器

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

🏠 Homepage

Install

npm install high-performance-timer

Usage

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

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 的规则

// 自定义处理规则
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,当任务执行完毕后会自动删除。

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

delete(key)

删除未执行的任务

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()

清空所有未执行的任务

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

npm run test

Author

👤 cuixiaorui

🤝 Contributing

Contributions, issues and feature requests are welcome!
Feel free to check issues page.

Show your support

Give a ⭐️ if this project helped you!

📝 License

Copyright © 2019 cuixiaorui.
This project is MIT licensed.


This README was generated with ❤️ by readme-md-generator