
# Rensning av tillstånd

När ett arbetsflöde går igenom många steg kan det samlade tillståndet bli stort. Tillståndsrensning tar automatiskt bort gamla stegresultat för att hålla tillståndet JSON begränsat och samtidigt bevara de data som är viktiga.

## Aktivera tillståndsrensning

Anropa `prune_state_after()` på arbetsflödesbyggaren. Argumentet anger hur många av de senaste stegens utdata som ska behållas:

```php
use Queuety\Queuety;

Queuety::workflow( 'long_pipeline' )
    ->then( StepA::class )
    ->then( StepB::class )
    ->then( StepC::class )
    ->then( StepD::class )
    ->then( StepE::class )
    ->prune_state_after( 2 )
    ->dispatch( [ 'input' => $data ] );
```

Med `prune_state_after( 2 )` tas utdata från steg A och B bort från tillståndet när steg D är klart. Steg C och D, de två senaste, bevaras.

## Så fungerar rensningen

När tillståndsrensning är aktiverad håller Queuety reda på vilka nycklar varje steg lägger till i tillståndet i en reserverad `_step_outputs`-array. När nästa steg påbörjas tas alla nycklar som lades till av steg äldre än gränsen bort.

Till exempel, med `prune_state_after( 2 )`:

```
After step 0 (StepA): state has keys from StepA + initial payload
After step 1 (StepB): state has keys from StepA + StepB + initial payload
After step 2 (StepC): state has keys from StepA + StepB + StepC + initial payload
  -> prune: StepA output removed (only 2 most recent kept)
After step 3 (StepD): state has keys from StepB + StepC + StepD + initial payload
  -> prune: StepB output removed
```

## Vad som bevaras

Queuety rensar aldrig reserverade nycklar som börjar med `_`, till exempel `_steps`, `_queue`, `_priority`, `_max_attempts`, `_on_cancel`, `_prune_state_after` och `_step_outputs`. Nycklar i den ursprungliga nyttolasten som skickas till `dispatch()` bevaras också, eftersom de inte spåras som stegresultat från början. Utöver det behåller Queuety de N senaste stegresultaten enligt den gräns du har konfigurerat.

## När du ska använda det

Tillståndsrensning är användbar för arbetsflöden med många steg där varje steg skapar data som senare steg inte behöver. Vanliga exempel är långa pipelineflöden där varje steg bara behöver utdata från föregående steg eller de två föregående, ETL-arbetsflöden som skapar omfattande mellanliggande strukturer samt rekursiva eller upprepande arbetsflöden som annars skulle samla på sig upprepade data. Om arbetsflödet bara har några få steg, eller om sena steg fortfarande är beroende av tidiga resultat, behöver du förmodligen inte rensa tillståndet alls.

## Standardbeteende

Tillståndsrensning är inaktiverad som standard. Metoden `prune_state_after()` tar ett heltalsargument. Om du anropar den utan argument används standardvärdet 2:

```php
->prune_state_after()     // keeps the 2 most recent step outputs
->prune_state_after( 5 )  // keeps the 5 most recent step outputs
```
