
# Stāvokļa attīrīšana

Darbplūsmai veicot daudz darbību, uzkrātais stāvoklis var kļūt apjomīgs. Stāvokļa attīrīšana automātiski noņem vecos darbību izvades datus, lai stāvokļa JSON apjoms būtu ierobežots, vienlaikus saglabājot svarīgos datus.

## Stāvokļa attīrīšanas iespējošana

Izsauciet `prune_state_after()` darbplūsmas veidotājā. Arguments norāda, cik neseno darbību izvades dati jāsaglabā:

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

Izmantojot `prune_state_after( 2 )`, pēc D darbības pabeigšanas A un B darbību izvades dati tiek noņemti no stāvokļa. C un D (divas pēdējās darbības) tiek saglabātas.

## Kā notiek attīrīšana

Kad stāvokļa attīrīšana ir ieslēgta, Queuety izseko, kuras atslēgas katra darbība pievieno stāvoklim, un saglabā šo informāciju rezervētā masīvā `_step_outputs`. Pārejot uz nākamo darbību, tiek noņemtas visas atslēgas, ko ieviesušas darbības, kuras ir vecākas par noteikto robežu.

Piemēram, izmantojot `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 tiek saglabāts

Queuety nekad neattīra rezervētās atslēgas, kas sākas ar `_`, piemēram, `_steps`, `_queue`, `_priority`, `_max_attempts`, `_on_cancel`, `_prune_state_after` un `_step_outputs`. Tiek saglabātas arī sākotnējās datu atslēgas, kas nodotas `dispatch()`, jo tās vispār netiek uzskaitītas kā darbību izvades dati. Turklāt Queuety saglabā N nesenākos darbību izvades datus atbilstoši konfigurētajai robežai.

## Kad to izmantot

Stāvokļa attīrīšana ir noderīga darbplūsmās ar daudzām darbībām, kur katra darbība rada datus, kas vēlākajām darbībām patiesībā nav vajadzīgi. Tipiski piemēri ir garas apstrādes ķēdes, kur katrai darbībai vajadzīgi tikai vienas vai divu iepriekšējo darbību izvades dati, ETL darbplūsmas, kas ģenerē apjomīgas starpstruktūras, kā arī rekursīvas vai atkārtotas darbplūsmas, kurās citādi uzkrātos atkārtoti stāvokļa dati. Ja darbplūsmā ir tikai dažas darbības vai vēlākās darbības joprojām ir atkarīgas no agrākajiem izvades datiem, attīrīšana, visticamāk, nav vajadzīga.

## Noklusējuma darbība

Stāvokļa attīrīšana pēc noklusējuma ir izslēgta. Metode `prune_state_after()` pieņem veselu skaitli. Ja to izsauc bez argumenta, noklusējuma vērtība ir 2:

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