
# Очищення стану

У міру проходження робочого потоку через багато кроків накопичений стан може збільшуватися. Очищення стану автоматично видаляє результати старих кроків, щоб обмежити розмір стану JSON, зберігаючи важливі дані.

## Увімкнення очищення стану

Викличте `prune_state_after()` для конструктора робочого потоку. Аргумент визначає кількість останніх кроків, результати яких потрібно зберегти:

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

Якщо встановити `prune_state_after( 2 )`, після завершення кроку D зі стану буде видалено результати кроків A і B. Кроки C і D (два останні) буде збережено.

## Як працює очищення

Коли очищення стану ввімкнено, Queuety відстежує ключі, які кожен крок додає до стану, у зарезервованому масиві `_step_outputs`. Після переходу до наступного кроку видаляються всі ключі, додані кроками, старішими за встановлений поріг.

Наприклад, якщо встановити `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
```

## Що зберігається

Queuety ніколи не очищає зарезервовані ключі, що починаються з `_`, як-от `_steps`, `_queue`, `_priority`, `_max_attempts`, `_on_cancel`, `_prune_state_after` і `_step_outputs`. Початкові ключі даних, передані до `dispatch()`, також зберігаються, оскільки вони від самого початку не відстежуються як результати кроків. Крім того, Queuety зберігає N останніх результатів кроків відповідно до заданого порогу.

## Коли використовувати

Очищення стану корисне для робочих потоків із багатьма кроками, де кожен крок створює дані, які насправді не потрібні наступним крокам. Типові приклади — це довгі конвеєри, у яких кожному кроку потрібен лише один або два попередні результати, робочі потоки ETL, що створюють об’ємні проміжні структури, а також рекурсивні або повторювані робочі потоки, у яких інакше накопичувався б надлишковий стан. Якщо у вашому робочому потоці лише кілька кроків або пізні кроки все ще залежать від результатів ранніх, очищення, імовірно, не потрібне.

## Типова поведінка

За замовчуванням очищення стану вимкнено. Метод `prune_state_after()` приймає ціле число. Якщо викликати його без аргументу, значенням за замовчуванням буде 2:

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