
# Čiščenje stanja

Ko potek dela napreduje skozi številne korake, se lahko nabrano stanje poveča. Čiščenje stanja samodejno odstrani stare izhode korakov, da ohrani omejeno velikost stanja JSON in hkrati obdrži pomembne podatke.

## Omogočanje čiščenja stanja

Pokličite `prune_state_after()` v gradniku poteka dela. Argument določa število nedavnih korakov, katerih izhode je treba ohraniti:

```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 ] );
```

Ko je nastavljeno `prune_state_after( 2 )`, se po zaključku koraka D iz stanja odstranijo izhodi korakov A in B. Koraka C in D (zadnja dva) se ohranita.

## Kako deluje čiščenje

Ko je čiščenje stanja omogočeno, Queuety v rezerviranem polju `_step_outputs` spremlja ključe, ki jih vsak korak doda v stanje. Po prehodu na nov korak se odstranijo vsi ključi, ki so jih dodali koraki pred določenim pragom.

Na primer, z nastavitvijo `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
```

## Kaj se ohrani

Queuety nikoli ne odstrani rezerviranih ključev, ki se začnejo z `_`, na primer `_steps`, `_queue`, `_priority`, `_max_attempts`, `_on_cancel`, `_prune_state_after` in `_step_outputs`. Ohranijo se tudi začetni ključi tovora, posredovani funkciji `dispatch()`, saj se že od začetka ne beležijo kot izhodi korakov. Poleg tega Queuety ohrani N najnovejših izhodov korakov glede na nastavljeni prag.

## Kdaj jo uporabiti

Čiščenje stanja je uporabno pri potekih dela s številnimi koraki, pri katerih posamezen korak ustvari podatke, ki jih poznejši koraki dejansko ne potrebujejo. Značilni primeri so dolgi cevovodi, v katerih vsak korak potrebuje le izhode enega ali dveh predhodnih korakov, poteki dela ETL, ki ustvarijo obsežne vmesne strukture, ter rekurzivni ali ponavljajoči se poteki dela, v katerih bi se sicer kopičilo ponavljajoče se stanje. Če ima vaš potek dela le nekaj korakov ali so poznejši koraki še vedno odvisni od zgodnjih izhodov, čiščenja verjetno sploh ne potrebujete.

## Privzeto delovanje

Čiščenje stanja je privzeto onemogočeno. Metoda `prune_state_after()` sprejme celoštevilski argument. Če jo pokličete brez argumenta, je privzeta vrednost 2:

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