import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/ru/functional-basic/Classes/CacheStatic - Быстрый глобальный кэш'/>

# Класс CacheStatic

> **⚠️ Устарел** — Этот класс устарел и не рекомендуется к использованию.

Класс-обертка, предоставляющий глобально доступный статический экземпляр кэша. Он позволяет выполнять операции быстрого кэширования в любом месте во время выполнения кода без необходимости создавать экземпляр или передавать объект `Cache`.

## Ключевые особенности

- **Глобальный доступ** — работает как паттерн «одиночка» (singleton), используя статические методы. Это означает, что один и тот же пул кэша доступен во всем контексте приложения.
- **Базовый механизм** — внутренне делегирует все вызовы стандартному экземпляру `Cache`, предоставляя вам те же преимущества отслеживания зависимостей и ленивых вычислений.
- **Удобство** — идеально подходит для простых требований кэширования общих данных в нескольких не связанных между собой компонентах.


Поскольку все методы `static`, вам никогда не нужно вызывать `new CacheStatic()`. Вы взаимодействуете с классом напрямую.

## Глобальное кэширование

### `get`

Используйте статический метод `get()` для получения кэшированного значения или его вычисления при отсутствии.

**Параметры:**
- `name: string` — уникальный идентификатор для вашей записи в глобальном кэше.
- `callback: () => T` — функция, которая вычисляет значение.
- `comparison?: any[]` — опциональный массив зависимостей. Передача нового массива (где значения или длина отличаются) очищает кэш и вызывает пересчет.

**Возвращает:** `T` — закэшированное или вычисленное значение.

```javascript
import { CacheStatic } from '@dxtmisha/functional'

// Файл A.js
function calculateHeavyData(id) {
  return CacheStatic.get(
    `heavy_data_${id}`,
    () => {
      console.log('Вычисляем...')
      return id * 100
    },
    [id] // Зависимость
  )
}

// Выведет 'Вычисляем...' и вернет 500
const res1 = calculateHeavyData(5) 

// Файл B.js
// НЕ будет выводить 'Вычисляем...', мгновенно вернет 500
const res2 = calculateHeavyData(5) 
```

### `getAsync`

Асинхронная версия метода `get()`. Полезна, когда функция обратного вызова возвращает `Promise`.

**Параметры:**
- `name: string` — уникальный идентификатор для вашей записи в глобальном кэше.
- `callback: () => Promise<T> | T` — асинхронная функция, которая вычисляет значение.
- `comparison?: any[]` — опциональный массив зависимостей. Передача нового массива (где значения или длина отличаются) очищает кэш и вызывает пересчет.

**Возвращает:** `Promise<T>` — промис, который разрешается в кэшированное или вычисленное значение.
