> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kazzle.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Синхронизация в реальном времени

> Приложения с локальным хранилищем, поддержкой автономного режима и автоматической фоновой синхронизацией.

## Как это работает

Приложения с синхронизацией в реальном времени хранят локальную базу данных на устройстве. Чтение происходит мгновенно (локально), запись ставится в очередь локально, и всё синхронизируется с сервером в фоне.

```text theme={"theme":"material-theme-darker"}
Запись пользователя -> Локальная БД -> Очередь загрузки -> Сервер -> Postgres
                                                                        |
Чтение пользователя  <- Локальная БД <- Репликация синхронизации <----+
```

Результат: мгновенное чтение, без спиннеров загрузки, и приложение, которое работает при плохом соединении или в автономном режиме.

## Что настраивает ИИ

Попросите ИИ создать приложение с синхронизацией в реальном времени. Он переиспользует подходящую активную базу данных, если она существует; иначе создаёт базу данных, включает сервис синхронизации и строит двухчастное приложение:

* **UI** — клиентское приложение с локальной базой данных, живыми запросами и коннектором синхронизации
* **Process** — endpoint токена, маршрут загрузки синхронизации и runner миграций

Учётные данные хранятся в [хранилище](/work/vault). ИИ подключает переменные окружения базы данных в компонент процесса с помощью инструмента `db`.

Перед тем как приложение считается готовым, база данных должна показать `sync: ready`. Если синхронизация не готова, приложение может отрендериться, но синхронизация данных в реальном времени между устройствами не будет работать.

## Практические советы

* Пишите локально в первую очередь. Дайте синхронизации загружать в фоне.
* Показывайте пустые состояния, а не спиннеры загрузки, когда локальные данные существуют.
* Храните видимое пользователю состояние в синхронизируемых таблицах, чтобы оно сохранялось при обновлении и в автономном режиме.
* Группируйте связанные локальные записи вместе, чтобы UI обновлялся одним шагом.
* Проверьте здоровье синхронизации перед тем как считать приложение готовым.

## Оболочка приложения для автономного режима

Шаблоны UI могут включать оболочку приложения для автономного режима, чтобы приложение могло переоткрыться после первого посещения без сети. Оболочка приложения — это статический HTML, JS, CSS и иконки.

* **Оболочка для автономного режима** позволяет приложению открыться без сети
* **Синхронизация** держит данные приложения пригодными для использования в автономном режиме

Вместе: приложение открывается без сети, показывает последние синхронизированные данные, ставит новые записи в очередь и синхронизируется при восстановлении соединения.

## Когда использовать синхронизацию в реальном времени

| Подходит                                 | Избыточно                                   |
| ---------------------------------------- | ------------------------------------------- |
| Менеджеры задач и приложения заметок     | Статические маркетинговые страницы          |
| Совместные инструменты                   | Одноразовые отправки форм                   |
| Полевые приложения со слабым соединением | Сайты-брошюры только для чтения             |
| Всё, что должно ощущаться мгновенным     | Приложения без ценности в автономном режиме |

## Переменные платформы

Kazzle автоматически внедряет небольшой набор переменных окружения в каждый процесс приложения. Они отделены от ваших собственных [секретов хранилища](/work/vault).

| Переменная                        | Что это                                                     |
| --------------------------------- | ----------------------------------------------------------- |
| `PORT`                            | Порт, на котором должен слушать ваш процесс                 |
| `HOST`                            | Имя хоста для привязки (обычно `0.0.0.0`)                   |
| `KAZZLE_API_URL`                  | Базовый URL, используемый вспомогательными функциями Kazzle |
| `KAZZLE_APP_COMPONENT_<NAME>_URL` | URL компонента-соседа во время выполнения                   |

### URL компонентов-соседей

Когда приложение имеет несколько компонентов (например, UI `web` и процесс `server`), Kazzle может внедрять URL для компонентов-соседей:

```
# В части "web":
KAZZLE_APP_COMPONENT_SERVER_URL=http://localhost:3001

# В части "server":
KAZZLE_APP_COMPONENT_WEB_URL=http://localhost:3000
```

Когда компонент-сосед уже развёрнут, внедрённое значение указывает на этот развёрнутый компонент. Иначе оно указывает на текущий адрес разработки для этого компонента-соседа.
