
# Állapotritkítás

Ahogy egy munkafolyamat sok lépésen halad át, a felhalmozott állapot mérete megnőhet. Az állapotritkítás automatikusan eltávolítja a régi lépések kimeneteit, hogy az állapot JSON korlátozott méretű maradjon, miközben megőrzi a fontos adatokat.

## Állapotritkítás engedélyezése

Hívd meg a `prune_state_after()` metódust a munkafolyamat-építőn. Az argumentum a megőrzendő legutóbbi lépések számát adja meg:

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

A `prune_state_after( 2 )` beállítással a D lépés befejeződése után az A és B lépés kimenetei eltávolításra kerülnek az állapotból. A C és D lépés (a két legutóbbi) megmarad.

## A ritkítás működése

Ha az állapotritkítás engedélyezve van, a Queuety egy fenntartott `_step_outputs` tömbben követi, hogy az egyes lépések mely kulcsokat adják hozzá az állapothoz. A következő lépésre lépés után eltávolítja a küszöbnél régebbi lépések által bevezetett kulcsokat.

Például `prune_state_after( 2 )` esetén:

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

## Mi marad meg

A Queuety soha nem ritkítja azokat a fenntartott kulcsokat, amelyek `_` karakterekkel kezdődnek, például: `_steps`, `_queue`, `_priority`, `_max_attempts`, `_on_cancel`, `_prune_state_after` és `_step_outputs`. A `dispatch()` számára átadott kezdeti payloadkulcsok is megmaradnak, mert eleve nem követi őket lépéskimenetként. Emellett a Queuety a beállított küszöb szerint megőrzi az N legutóbbi lépés kimenetét.

## Mikor használja

Az állapotritkítás olyan soklépéses munkafolyamatoknál hasznos, amelyekben az egyes lépések olyan adatokat állítanak elő, amelyekre a későbbi lépéseknek valójában nincs szükségük. Tipikus példa erre a hosszú folyamatlánc, ahol minden lépésnek csak az előző egy vagy két kimenetére van szüksége, a terjedelmes köztes struktúrákat létrehozó ETL-munkafolyamatok, valamint az egyébként ismétlődő állapotot felhalmozó rekurzív vagy ismétlődő munkafolyamatok. Ha a munkafolyamatod csak néhány lépésből áll, vagy a későbbi lépéseknek továbbra is szükségük van a korai kimenetekre, valószínűleg egyáltalán nincs szükséged ritkításra.

## Alapértelmezett működés

Az állapotritkítás alapértelmezés szerint ki van kapcsolva. A `prune_state_after()` metódus egész számú argumentumot fogad. Argumentum nélkül meghívva az alapértelmezett érték 2:

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