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

rateLimit

Funktion: rateLimit()

ts
function rateLimit<TFn>(fn, initialOptions): (...args) => boolean
function rateLimit<TFn>(fn, initialOptions): (...args) => boolean

Definiert in: rate-limiter.ts:404

Erstellt eine ratenbegrenzte Funktion, die die bereitgestellte Funktion bis zu einer maximalen Anzahl von Ausführungen innerhalb eines Zeitfensters ausführt.

Beachten Sie, dass Ratenbegrenzung eine einfachere Form der Ausführungskontrolle darstellt als Throttling oder Debouncing.

  • Ein Ratenbegrenzer lässt alle Ausführungen zu, bis das Limit erreicht ist, und blockiert dann alle nachfolgenden Aufrufe, bis das Fenster zurückgesetzt wird.
  • Ein Throttler sorgt für gleichmäßige Abstände zwischen den Ausführungen, was für eine konsistente Leistung besser sein kann.
  • Ein Debouncer fasst mehrere Aufrufe zu einem zusammen, was für die Verarbeitung von Ereignisspitzen besser ist.

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.

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 die Eigenschaft store.state der zugrunde liegenden RateLimiter-Instanz abgerufen werden.
  • Bei Verwendung von Framework-Adaptern (React/Solid) wird der Zustand aus der `state`-Eigenschaft des Hooks abgerufen

Erwägen Sie die Verwendung von throttle() oder debounce(), wenn Sie eine intelligentere Ausführungskontrolle benötigen. Verwenden Sie Ratenbegrenzung, wenn Sie speziell ein hartes Limit für die Anzahl der Ausführungen innerhalb eines Zeitraums durchsetzen müssen.

Typparameter

TFn erweitert AnyFunction

Parameter

fn

TFn

initialOptions

RateLimiterOptions<TFn>

Gibt zurück

Funktion

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

Beispiel

ts
// Rate limit to 5 calls per minute with a sliding window
const rateLimited = rateLimit(makeApiCall, {
  limit: 5,
  window: 60000,
  windowType: 'sliding',
  onReject: (rateLimiter) => {
    console.log(`Rate limit exceeded. Try again in ${rateLimiter.getMsUntilNextWindow()}ms`);
  }
});

// First 5 calls will execute immediately
// Additional calls will be rejected until the minute window resets
rateLimited();

// For more even execution, consider using throttle instead:
const throttled = throttle(makeApiCall, { wait: 12000 }); // One call every 12 seconds
// Rate limit to 5 calls per minute with a sliding window
const rateLimited = rateLimit(makeApiCall, {
  limit: 5,
  window: 60000,
  windowType: 'sliding',
  onReject: (rateLimiter) => {
    console.log(`Rate limit exceeded. Try again in ${rateLimiter.getMsUntilNextWindow()}ms`);
  }
});

// First 5 calls will execute immediately
// Additional calls will be rejected until the minute window resets
rateLimited();

// For more even execution, consider using throttle instead:
const throttled = throttle(makeApiCall, { wait: 12000 }); // One call every 12 seconds
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.