
# Tilstandsrensning

Efterhånden som et workflow gennemgår mange trin, kan den ophobede tilstand vokse sig stor. Tilstandsrensning fjerner automatisk gamle trinresultater for at holde tilstanden JSON begrænset, samtidig med at de vigtige data bevares.

## Aktivér tilstandsrensning

Kald `prune_state_after()` på workflow-builderen. Argumentet er antallet af seneste trin, hvis output skal bevares:

```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 )` fjernes outputtene fra trin A og B fra tilstanden, når trin D er færdigt. Trin C og D (de to seneste) bevares.

## Sådan fungerer rensningen

Når tilstandsrensning er aktiveret, registrerer Queuety, hvilke nøgler hvert trin føjer til tilstanden, i et reserveret `_step_outputs`-array. Når der fortsættes til et nyt trin, fjernes alle nøgler, der blev tilføjet af trin, som ligger længere tilbage end grænsen.

For eksempel 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
```

## Hvad bevares

Queuety renser aldrig reserverede nøgler, der begynder med `_`, såsom `_steps`, `_queue`, `_priority`, `_max_attempts`, `_on_cancel`, `_prune_state_after` og `_step_outputs`. De oprindelige nyttelastnøgler, der sendes til `dispatch()`, bevares også, fordi de ikke registreres som trinoutput. Derudover bevarer Queuety de N seneste trinoutput i henhold til den konfigurerede grænse.

## Hvornår skal den bruges

Tilstandsrensning er nyttig for workflows med mange trin, hvor hvert trin producerer data, som senere trin reelt ikke har brug for. Typiske eksempler er lange pipelines, hvor hvert trin kun behøver outputtet fra det foregående trin eller de to foregående trin, ETL-workflows, der genererer store mellemliggende datastrukturer, samt rekursive eller gentagne workflows, der ellers ville ophobe gentagen tilstand. Hvis dit workflow kun har få trin, eller hvis sene trin stadig afhænger af tidlige output, har du sandsynligvis slet ikke brug for rensning.

## Standardadfærd

Tilstandsrensning er deaktiveret som standard. Metoden `prune_state_after()` tager et heltalsargument. Hvis den kaldes uden et argument, er standardværdien 2:

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