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

createBatcher

Funktion: createBatcher()

ts
function createBatcher<TValue, TSelected>(
   fn, 
   initialOptions, 
selector): SolidBatcher<TValue, TSelected>
function createBatcher<TValue, TSelected>(
   fn, 
   initialOptions, 
selector): SolidBatcher<TValue, TSelected>

Definiert in: batcher/createBatcher.ts:100

Erstellt eine Solid-kompatible Batcher-Instanz zur Verwaltung von Elementstapeln und gibt Solid-Signale für alle zustandsbehafteten Eigenschaften aus.

Merkmale

  • Stapelverarbeitung von Elementen unter Verwendung der bereitgestellten fn Funktion
  • Konfigurierbare Stapelgröße und Wartezeit
  • Benutzerdefinierte Batch-Verarbeitungslogik über getShouldExecute
  • Event-Callbacks zur Überwachung von Batch-Operationen
  • Alle zustandsbehafteten Eigenschaften (Elemente, Zählungen usw.) werden als Solid-Signale für Reaktivität ausgegeben

Der Batcher sammelt Elemente und verarbeitet sie in Stapeln basierend auf

  • Maximale Stapelgröße
  • Zeitbasierte Batching (Verarbeitung nach X Millisekunden)
  • Benutzerdefinierte Batch-Verarbeitungslogik über getShouldExecute

Zustandsverwaltung und Selektor

Der Hook verwendet TanStack Store für reaktives Zustandsmanagement. Der Parameter selector ermöglicht es Ihnen anzugeben, welche Zustandsänderungen ein erneutes Rendern auslösen, wodurch die Leistung optimiert wird, indem unnötige erneute Renderings verhindert werden, wenn irrelevante Zustandsänderungen auftreten.

Standardmäßig erfolgen keine reaktiven Zustands-Subscriptions und Sie müssen das Zustands-Tracking durch Bereitstellen einer Selector-Funktion aktivieren. Dies verhindert unnötige Renderings und gibt Ihnen die volle Kontrolle darüber, wann Ihre Komponente aktualisiert wird. Nur wenn Sie einen Selector bereitstellen, wird die Komponente neu gerendert, wenn sich die ausgewählten Zustandswerte ändern.

Verfügbare Zustandseigenschaften

  • executionCount: Anzahl der abgeschlossenen Batch-Ausführungen
  • isRunning: Ob der Batcher gerade läuft (nicht gestoppt)
  • items: Array von Elementen, die derzeit für das Stapeln in der Warteschlange stehen
  • totalItemsProcessed: Gesamtzahl der einzelnen Elemente, die über alle Stapel hinweg verarbeitet wurden

Beispielanwendung

tsx
// Default behavior - no reactive state subscriptions
const batcher = createBatcher(
  (items) => {
    // Process batch of items
    console.log('Processing batch:', items);
  },
  {
    maxSize: 5,
    wait: 2000,
    onExecute: (batcher) => console.log('Batch executed'),
    getShouldExecute: (items) => items.length >= 3
  }
);

// Opt-in to re-render when items or isRunning changes (optimized for UI updates)
const batcher = createBatcher(
  (items) => console.log('Processing batch:', items),
  { maxSize: 5, wait: 2000 },
  (state) => ({ items: state.items, isRunning: state.isRunning })
);

// Opt-in to re-render when execution metrics change (optimized for tracking progress)
const batcher = createBatcher(
  (items) => console.log('Processing batch:', items),
  { maxSize: 5, wait: 2000 },
  (state) => ({
    executionCount: state.executionCount,
    totalItemsProcessed: state.totalItemsProcessed
  })
);

// Add items to batch
batcher.addItem('task1');
batcher.addItem('task2');

// Control the batcher
batcher.stop();  // Pause processing
batcher.start(); // Resume processing

// Access the selected state (will be empty object {} unless selector provided)
const { items, isRunning } = batcher.state();
// Default behavior - no reactive state subscriptions
const batcher = createBatcher(
  (items) => {
    // Process batch of items
    console.log('Processing batch:', items);
  },
  {
    maxSize: 5,
    wait: 2000,
    onExecute: (batcher) => console.log('Batch executed'),
    getShouldExecute: (items) => items.length >= 3
  }
);

// Opt-in to re-render when items or isRunning changes (optimized for UI updates)
const batcher = createBatcher(
  (items) => console.log('Processing batch:', items),
  { maxSize: 5, wait: 2000 },
  (state) => ({ items: state.items, isRunning: state.isRunning })
);

// Opt-in to re-render when execution metrics change (optimized for tracking progress)
const batcher = createBatcher(
  (items) => console.log('Processing batch:', items),
  { maxSize: 5, wait: 2000 },
  (state) => ({
    executionCount: state.executionCount,
    totalItemsProcessed: state.totalItemsProcessed
  })
);

// Add items to batch
batcher.addItem('task1');
batcher.addItem('task2');

// Control the batcher
batcher.stop();  // Pause processing
batcher.start(); // Resume processing

// Access the selected state (will be empty object {} unless selector provided)
const { items, isRunning } = batcher.state();

Typparameter

TValue

TSelected = {}

Parameter

fn

(items) => void

initialOptions

BatcherOptions<TValue> = {}

selector

(state) => TSelected

Gibt zurück

SolidBatcher<TValue, TSelected>

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.