Framework
Version
Debouncer API Referenz
Throttler API Referenz
Rate Limiter API Referenz
Queue API Referenz
Batcher API Referenz

RateLimiter

Klasse: RateLimiter<TFn>

Definiert in: rate-limiter.ts:143

Eine Klasse, die eine ratenbegrenzte Funktion erstellt.

Ratenbegrenzung ist ein einfacher Ansatz, der es einer Funktion ermöglicht, bis zu einem bestimmten Limit innerhalb eines Zeitfensters ausgeführt zu werden, und dann alle nachfolgenden Aufrufe blockiert, bis das Fenster abgelaufen ist. Dies kann zu "bursty" Verhalten führen, bei dem alle Ausführungen sofort erfolgen, gefolgt von einer vollständigen Blockierung.

Der Ratenbegrenzer unterstützt zwei Arten von Fenstern

  • 'fixed': Ein striktes Fenster, das nach Ablauf des Zeitfensters zurückgesetzt wird. Alle Ausführungen innerhalb des Fensters zählen für das Limit, und das Fenster wird nach Ablauf der Periode vollständig zurückgesetzt.
  • 'sliding': Ein rollierendes Fenster, das Ausführungen ermöglicht, sobald ältere abgelaufen sind. Dies sorgt für eine konsistentere Ausführungsrate im Laufe der Zeit.

Für reibungslosere Ausführungsmuster sollten Sie erwägen:

  • Throttling: Sorgt für einen gleichmäßigen Abstand zwischen den Ausführungen (z. B. maximal einmal alle 200 ms)
  • Debouncing: Wartet auf eine Pause bei den Aufrufen, bevor er ausgeführt wird (z. B. nach 500 ms ohne Aufrufe)

Ratenbegrenzung eignet sich am besten für harte API-Limits oder Ressourcenbeschränkungen. Für UI-Updates oder das Glätten häufiger Ereignisse bieten Throttling oder Debouncing normalerweise eine bessere Benutzererfahrung.

Zustandsverwaltung

  • Verwendet TanStack Store für reaktives Zustandsmanagement
  • Verwenden Sie initialState, um Anfangswerte für den Zustand bei der Erstellung des Ratenbegrenzers bereitzustellen
  • Verwenden Sie den Rückruf onExecute, um auf die Funktionsausführung zu reagieren und benutzerdefinierte Logik zu implementieren
  • Verwenden Sie den Callback onReject, um auf zurückgewiesene Ausführungen zu reagieren, wenn das Ratenlimit überschritten wird
  • Der Zustand umfasst die Anzahl der Ausführungen, die Ausführungszeiten und die Anzahl der Ablehnungen
  • Der Zustand kann über rateLimiter.store.state abgerufen werden, wenn die Klasse direkt verwendet wird
  • Bei Verwendung von Framework-Adaptern (React/Solid) wird der Zustand von rateLimiter.state abgerufen

Beispiel

ts
const rateLimiter = new RateLimiter(
  (id: string) => api.getData(id),
  {
    limit: 5,
    window: 1000,
    windowType: 'sliding',
  }
);

// Will execute immediately until limit reached, then block
rateLimiter.maybeExecute('123');
const rateLimiter = new RateLimiter(
  (id: string) => api.getData(id),
  {
    limit: 5,
    window: 1000,
    windowType: 'sliding',
  }
);

// Will execute immediately until limit reached, then block
rateLimiter.maybeExecute('123');

Typparameter

TFn erweitert AnyFunction

Konstruktoren

new RateLimiter()

ts
new RateLimiter<TFn>(fn, initialOptions): RateLimiter<TFn>
new RateLimiter<TFn>(fn, initialOptions): RateLimiter<TFn>

Definiert in: rate-limiter.ts:150

Parameter

fn

TFn

initialOptions

RateLimiterOptions<TFn>

Gibt zurück

RateLimiter<TFn>

Eigenschaften

fn

ts
fn: TFn;
fn: TFn;

Definiert in: rate-limiter.ts:151


key

ts
key: string;
key: string;

Definiert in: rate-limiter.ts:146


optionen

ts
options: RateLimiterOptions<TFn>;
options: RateLimiterOptions<TFn>;

Definiert in: rate-limiter.ts:147


store

ts
readonly store: Store<Readonly<RateLimiterState>>;
readonly store: Store<Readonly<RateLimiterState>>;

Definiert in: rate-limiter.ts:144

Methoden

getMsUntilNextWindow()

ts
getMsUntilNextWindow(): number
getMsUntilNextWindow(): number

Definiert in: rate-limiter.ts:341

Gibt die Anzahl der Millisekunden zurück, bis die nächste Ausführung möglich ist

Gibt zurück

number


getRemainingInWindow()

ts
getRemainingInWindow(): number
getRemainingInWindow(): number

Definiert in: rate-limiter.ts:333

Gibt die Anzahl der verbleibenden erlaubten Ausführungen im aktuellen Fenster zurück

Gibt zurück

number


maybeExecute()

ts
maybeExecute(...args): boolean
maybeExecute(...args): boolean

Definiert in: rate-limiter.ts:235

Versucht, die ratenbegrenzte Funktion auszuführen, wenn sie innerhalb der konfigurierten Grenzen liegt. Die Ausführung wird zurückgewiesen, wenn die Anzahl der Aufrufe im aktuellen Fenster das Limit überschreitet.

Parameter

args

...Parameters<TFn>

Gibt zurück

boolean

Beispiel

ts
const rateLimiter = new RateLimiter(fn, { limit: 5, window: 1000 });

// First 5 calls will return true
rateLimiter.maybeExecute('arg1', 'arg2'); // true

// Additional calls within the window will return false
rateLimiter.maybeExecute('arg1', 'arg2'); // false
const rateLimiter = new RateLimiter(fn, { limit: 5, window: 1000 });

// First 5 calls will return true
rateLimiter.maybeExecute('arg1', 'arg2'); // true

// Additional calls within the window will return false
rateLimiter.maybeExecute('arg1', 'arg2'); // false

reset()

ts
reset(): void
reset(): void

Definiert in: rate-limiter.ts:352

Setzt den Zustand des Ratenbegrenzers zurück

Gibt zurück

void


setOptions()

ts
setOptions(newOptions): void
setOptions(newOptions): void

Definiert in: rate-limiter.ts:174

Aktualisiert die Optionen des Ratenbegrenzers

Parameter

newOptions

Partial<RateLimiterOptions<TFn>>

Gibt zurück

void

Unsere Partner
Code Rabbit
Unkey
Bytes abonnieren

Ihre wöchentliche Dosis JavaScript-Nachrichten. Jeden Montag kostenlos an über 100.000 Entwickler geliefert.

Bytes

Kein Spam. Jederzeit kündbar.

Bytes abonnieren

Ihre wöchentliche Dosis JavaScript-Nachrichten. Jeden Montag kostenlos an über 100.000 Entwickler geliefert.

Bytes

Kein Spam. Jederzeit kündbar.