
# Curățarea stării

Pe măsură ce un flux de lucru parcurge numeroși pași, starea acumulată poate deveni voluminoasă. Curățarea stării elimină automat rezultatele pașilor vechi, pentru a menține starea JSON în limite rezonabile și a păstra datele importante.

## Activarea curățării stării

Apelați `prune_state_after()` pe constructorul fluxului de lucru. Argumentul reprezintă numărul de pași recenți ale căror rezultate trebuie păstrate:

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

Cu `prune_state_after( 2 )`, după încheierea pasului D, rezultatele pașilor A și B sunt eliminate din stare. Pașii C și D (cei mai recenți doi) sunt păstrați.

## Cum funcționează curățarea

Când este activată curățarea stării, Queuety urmărește cheile adăugate în stare de fiecare pas într-un tablou rezervat `_step_outputs`. După trecerea la un pas nou, sunt eliminate toate cheile introduse de pașii mai vechi decât pragul.

De exemplu, cu `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
```

## Ce se păstrează

Queuety nu curăță niciodată cheile rezervate care încep cu `_`, precum `_steps`, `_queue`, `_priority`, `_max_attempts`, `_on_cancel`, `_prune_state_after` și `_step_outputs`. Cheile payloadului inițial transmise către `dispatch()` sunt și ele păstrate, deoarece nu sunt urmărite ca rezultate ale pașilor. În plus, Queuety păstrează cele mai recente N rezultate ale pașilor, conform pragului configurat.

## Când să îl folosiți

Curățarea stării este utilă pentru fluxurile de lucru cu mulți pași, când fiecare pas produce date de care pașii ulteriori nu au nevoie. Exemple tipice sunt pipeline-urile lungi în care fiecare pas are nevoie doar de unul sau două rezultate anterioare, fluxurile ETL care generează structuri intermediare voluminoase și fluxurile recursive sau repetitive care altfel ar acumula o stare redundantă. Dacă fluxul de lucru are doar câțiva pași sau dacă pașii ulteriori depind încă de rezultatele timpurii, probabil că nu aveți nevoie de curățare.

## Comportamentul implicit

Curățarea stării este dezactivată implicit. Metoda `prune_state_after()` acceptă un argument întreg. Dacă o apelați fără argument, valoarea implicită este 2:

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