# nodejs_thr

> 提供了一个js性能优化的接口,节流、防抖等功能.

Latest version **1.1.1** (published 2022-12-19) · ISC license · 0 weekly downloads

## Install

```sh
npm install nodejs_thr
pnpm add nodejs_thr
yarn add nodejs_thr
bun add nodejs_thr
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.1 |
| Published | 2022-12-19 |
| First published | 2022-12-18 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 24.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | react2022 |
| Keywords | thr, throttle, debounce, timestamp, 防抖, 节流, performance |

## Links

- npm: https://www.npmjs.com/package/nodejs_thr
- npm.io page: https://npm.io/package/nodejs_thr

## Alternatives

- [byte-size](https://npm.io/package/byte-size.md) — 2.1M weekly downloads
- [speed-limiter](https://npm.io/package/speed-limiter.md) — 16.0K weekly downloads
- [@powersync/node](https://npm.io/package/@powersync/node.md) — 10.9K weekly downloads
- [@ledgerhq/coin-cardano](https://npm.io/package/@ledgerhq/coin-cardano.md) — 1.0K weekly downloads
- [@jayesol/jayeson.lib.streamfinder](https://npm.io/package/@jayesol/jayeson.lib.streamfinder.md) — 1.0K weekly downloads

## Recent versions

- 1.1.1 (latest) — 2022-12-19
- 1.0.0 — 2022-12-18

## README

## install
```
npm install nodejs-thr
```

## import
```js
const Throttle = require("nodejs_thr");
```
## use
```js
// maxlen?: number;
const maxLength = 12;
// create Throttle object
const thr = new Throttle(maxLength);
// or
new Throttle();
```

## frame
```js
setInterval(() => {
    thr.frame(() => {
        // code
    }, 2000); // wait 2s later excute function
}, 0)
```

## frame source code
```js
const state = ["wait", "empty"];
frame( fun: Function, timing: number ): this | void {
    if(this.state == state[1]) {
        fun();
        this.state = state[0];
        setTimeout(() => {
            this.state = state[1];
        }, timing);
    } else {
        return this;
    }
}
```

<!-- ## outage -->
<!-- # new version 1.2.0 push outage mode! -->
## outage
```js
thr.outage(( self ) => {
    console.log(self); // Throttle
}, 3000);
```

## timestamp
```js
thr.timestamp((next)=>{
    setTimeout(()=>{
        console.log(1);
        next()
    }, 3000);
}).timestamp((next, timer)=>{
    setTimeout(()=>{
        console.log(2)
        next();
    })
}).timestamp(()=>{
    console.log(3);
    // result -> 1 -> 2 -> 3
}).start().show(); // excute finshed check queue.
```

## timestamp request
```js
for(let i = start; i <= length; ++i) {
    try {
        thr.wait(async (next, timeline) => {
            console.log(`准备下载-->${vName}第${i}集`);
            await ws.write(`${title}${i}.${exten}`, next, anime_id, i );
            if(i == length) return console.log("全部下载已完成");
        }, "timestamp");
    } catch(err) {
        console.log(err);
        console.error('网络错误/请求的资源不存在!');
    }
}
thr.start();
```
## timestamp source code
```js
timestamp( fun: Function ): this {
    this.append(fun);
        return this;
}
start() {
    let back = () => {
        if(this.size) {
            (this.remove() as Function)(()=>{
                return back();
            }, new Date().getTime())
        }
    }
    back();
    return this;
}
```

## debounce
```js
const queue = thr.newQueue();
thr.frame(() => {
    thr.debounce(() => {
        // code
    }, 2000, queue);
}, 300);
```

## debounce source code
```js
interface Debounce {
    (
        fun: Function,
        timeout: number,
        queue?: Queue | undefined
    ): void;
}
debounce = <Debounce>(fun, timeout, queue) => {
    if(queue) {
        queue.head() && clearTimeout(<number>queue.remove());
        queue.append(setTimeout(() => {
            return fun();
        }, timeout));
    } else {
        this.#queue.head() && clearTimeout(<number>this.#queue.remove());
        this.#queue.append(setTimeout(() => {
            return fun();
        }, timeout));
    }
}
```

## wait
```js
// ["frame", "outage", "timestamp", "debounce"];
const mode = thr.getMode();
// if mode = '' else default as frame mode
thr.wait(()=>{
    // frame mode code
}, thr[0], 30);
thr.wait(()=>{
    // debounce mode code
}, thr[3], 200); // if param is void; debounce param as default
// timestamp
thr.wait((next)=>{
    next()
}, "timestamp").wait(()=>{
    console.log("close timestamp.")
}, "timestamp").start();
```

## License
ISC

---
_Source: https://npm.io/package/nodejs_thr · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
