All Projects → github → Mini Throttle

github / Mini Throttle

Licence: mit
A small JavaScript throttle & debounce implementation.

Programming Languages

typescript
32286 projects

Labels

Projects that are alternatives of or similar to Mini Throttle

Microtext.js
A micro JavaScript utility for processing text.
Stars: ✭ 59 (-27.16%)
Mutual labels:  utility
Mixin Deep
Deeply mix the properties of objects into the first object, while also mixing-in child objects.
Stars: ✭ 72 (-11.11%)
Mutual labels:  utility
Archivemounter
Mounts archives like disk images (macOS)
Stars: ✭ 77 (-4.94%)
Mutual labels:  utility
S3reverse
The format of various s3 buckets is convert in one format. for bugbounty and security testing.
Stars: ✭ 61 (-24.69%)
Mutual labels:  utility
Str metrics
Ruby gem (native extension in Rust) providing implementations of various string metrics
Stars: ✭ 68 (-16.05%)
Mutual labels:  utility
Karmabot
🤖 A Multipurpose Discord Bot with a Music System & Utility commands used by 160K+ users!
Stars: ✭ 73 (-9.88%)
Mutual labels:  utility
Yippy
macOS open source clipboard manager
Stars: ✭ 57 (-29.63%)
Mutual labels:  utility
Babel Plugin Captains Log
Babel plugin that injects helpful details into console statements
Stars: ✭ 80 (-1.23%)
Mutual labels:  utility
Vue Coerce Props
Coerce props to whatever you want
Stars: ✭ 72 (-11.11%)
Mutual labels:  utility
Go Parsefix
Fixes simple parse errors automatically. Works great in combination with goimports.
Stars: ✭ 77 (-4.94%)
Mutual labels:  utility
Smoldash
Smoldash, A tiny lodash alternative built for the modern web
Stars: ✭ 66 (-18.52%)
Mutual labels:  utility
Poke
A powerful reflection module for powershell.
Stars: ✭ 66 (-18.52%)
Mutual labels:  utility
Trickle
600 baud pipe and terminal.
Stars: ✭ 75 (-7.41%)
Mutual labels:  utility
Zplutility
ZPL Utility, a .net tool library helping to generate ZPL string
Stars: ✭ 60 (-25.93%)
Mutual labels:  utility
Vs2017offlinesetuputility
This utility allow downloading offline setup or deletion of old version Visual Studio 2017/2019 Offline Setup files and folder
Stars: ✭ 79 (-2.47%)
Mutual labels:  utility
Cameo
CMIO DAL plugin explorer
Stars: ✭ 59 (-27.16%)
Mutual labels:  utility
Schematics Utilities
🛠️ Useful exported utilities for working with Schematics
Stars: ✭ 73 (-9.88%)
Mutual labels:  utility
Sift.js
Use Mongodb queries in JavaScript
Stars: ✭ 1,229 (+1417.28%)
Mutual labels:  utility
Minicache
📦 Python memory caching utilities
Stars: ✭ 79 (-2.47%)
Mutual labels:  utility
With
Command prefixing for continuous workflow using a single tool.
Stars: ✭ 1,198 (+1379.01%)
Mutual labels:  utility

mini-throttle

This is a package which provides throttle and debounce functions, with both flow and TypeScript declarations, and a minimal code footprint (less than 60 lines, less than 350 bytes minified+gzipped)

throttling, debouncing, and everything inbetween

type ThrottleOptions = {
  start?: boolean, // fire immediately on the first call
  middle?: boolean, // if true, fire as soon as `wait` has passed
  once?: boolean, // cancel after the first successful call
}
function throttle<T>(
  callback: (...args: T[]) => any,
  wait: number,
  opts?: ThrottleOptions
): (...args: T[]) => void

function debounce<T>(
  callback: (...args: T[]) => any,
  wait: number,
  opts?: ThrottleOptions
): (...args: T[]) => void

This package comes with two functions; throttle and debounce.

Both of these functions offer the exact same signature, because they're both the same function - just with different opts defaults:

  • throttle opts default to { start: true, middle: true, once: false }.
  • debounce opts default to { start: false, middle: false, once: false }.

Each of the options changes when callback gets called. The best way to illustrate this is with a marble diagram.

for (let i = 1; i <= 10; ++i) {
  fn(i)
  await delay(50)
}
await delay(100)
| fn()                                         | 1 2 3 4 5 6 7 8 9 10 |
| throttle(fn, 100)                            | 1 2   4   6   8   10 |
| throttle(fn, 100, {start: false})            |   2   4   6   8   10 |
| throttle(fn, 100, {middle: false})           | 1                 10 |
| throttle(fn, 100, {once: true})              | 1                    |
| throttle(fn, 100, {once: true, start: false})|   2                  |
| debounce(fn, 100)                            |                   10 |

TypeScript Decorators Support!

This package also includes a decorator module which can be used to provide TypeScript Decorator annotations to functions.

Here's an example, showing what you need to do:

import {throttle} from '@github/mini-throttle/decorators'
//                                           ^ note: add `/decorators` to the import to get decorators

class MyClass {
  @throttle(100, { start: false }) // <- Just like normal throttle, but you omit the callback argument
  doThings() {
    // `MyClass.prototype.doThings` will be throttled!
  }
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].