
# Būsenos valymas

Darbo eigai pereinant daug žingsnių, sukaupta būsena gali labai išaugti. Būsenos valymas automatiškai pašalina senus žingsnių rezultatus, kad būsenos JSON dydis liktų ribotas ir būtų išsaugoti svarbūs duomenys.

## Būsenos valymo įjungimas

Iškvieskite `prune_state_after()` darbo eigos kūrimo priemonėje. Argumentas nurodo, kiek naujausių žingsnių rezultatų reikia išsaugoti:

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

Nustačius `prune_state_after( 2 )`, užbaigus D žingsnį, iš būsenos pašalinami A ir B žingsnių rezultatai. C ir D žingsniai (du naujausi) išsaugomi.

## Kaip veikia valymas

Įjungus būsenos valymą, Queuety seka, kuriuos raktus kiekvienas žingsnis prideda prie būsenos, ir išsaugo juos rezervuotame `_step_outputs` masyve. Pereinant prie naujo žingsnio, pašalinami visi raktai, kuriuos pridėjo už nustatytos ribos esantys senesni žingsniai.

Pavyzdžiui, kai nustatyta `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
```

## Kas išsaugoma

Queuety niekada nepašalina rezervuotų raktų, prasidedančių `_`, pavyzdžiui, `_steps`, `_queue`, `_priority`, `_max_attempts`, `_on_cancel`, `_prune_state_after` ir `_step_outputs`. Pradiniai duomenų raktai, perduoti `dispatch()`, taip pat išsaugomi, nes jie ir taip nesekami kaip žingsnių rezultatai. Be to, Queuety išsaugo N naujausių žingsnių rezultatų pagal jūsų nustatytą ribą.

## Kada naudoti

Būsenos valymas naudingas ilgose darbo eigose, kuriose kiekvienas žingsnis sukuria duomenų, kurių vėlesniems žingsniams iš tiesų nereikia. Tipiniai pavyzdžiai – ilgi procesai, kuriuose kiekvienam žingsniui reikia tik vieno ar dviejų ankstesnių rezultatų, ETL darbo eigos, sukuriančios dideles tarpines struktūras, ir rekursinės arba pasikartojančios darbo eigos, kuriose kitaip kauptųsi pasikartojančios būsenos. Jei jūsų darbo eiga turi tik kelis žingsnius arba vėlesni žingsniai vis dar priklauso nuo ankstyvųjų rezultatų, valymo tikriausiai visai nereikia.

## Numatytoji elgsena

Būsenos valymas pagal numatytąją nuostatą išjungtas. Metodas `prune_state_after()` priima sveikojo skaičiaus argumentą. Iškvietus jį be argumento, numatytoji reikšmė yra 2:

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