# Web Workers

- Human documentation: [https://docs.univer.ai/ru-RU/guides/bases/getting-started/worker](https://docs.univer.ai/ru-RU/guides/bases/getting-started/worker)

- Agent Markdown: [https://docs.univer.ai/ru-RU/guides/bases/getting-started/worker.md](https://docs.univer.ai/ru-RU/guides/bases/getting-started/worker.md)

- Requested language: `ru-RU`

- Content language: `ru-RU`

- Documentation version: `1.2.0`

- Source: [bases/getting-started/worker.ru-RU.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/bases/getting-started/worker.ru-RU.mdx)

---

Bases может перенести вычисление формул в Worker[^web-worker] через RPC. Задайте `notExecuteFormula: true` движку в основном потоке и зарегистрируйте удалённый плагин Bases с вычислительным движком в Worker.

Сначала выполните [установку и базовую настройку](https://docs.univer.ai/ru-RU/guides/bases/getting-started/installation.md). Эти фрагменты дополняют существующую конфигурацию. Регистрируйте плагины до создания или загрузки содержимого; изменяйте уже имеющуюся регистрацию без дублирования.

## Основной поток

```typescript title="main.ts"
import { UniverProFormulaEnginePlugin } from '@univerjs-pro/engine-formula'
import { UniverRPCMainThreadPlugin } from '@univerjs/rpc'

univer.registerPlugin(UniverRPCMainThreadPlugin, {
  workerURL: new Worker(new URL('./worker.ts', import.meta.url), { type: 'module' }),
})
univer.registerPlugin(UniverProFormulaEnginePlugin, { notExecuteFormula: true })
```

## Точка входа Worker

```typescript title="worker.ts"
import { UniverRemoteBasesPlugin } from '@univerjs-pro/bases'
import { UniverProFormulaEnginePlugin } from '@univerjs-pro/engine-formula'
import { UniverLicensePlugin } from '@univerjs-pro/license'
import { LocaleType, Univer } from '@univerjs/core'
import { UniverRPCWorkerThreadPlugin } from '@univerjs/rpc'

const univer = new Univer({ locale: LocaleType.RU_RU })
univer.registerPlugin(UniverLicensePlugin, { license: 'your license.txt' })
univer.registerPlugin(UniverProFormulaEnginePlugin)
univer.registerPlugin(UniverRemoteBasesPlugin)
univer.registerPlugin(UniverRPCWorkerThreadPlugin)
```

Используйте модульный Worker и отдельный файл точки входа. Версии пакетов в обоих потоках должны совпадать. Отрисовка и взаимодействие с пользователем остаются в основном потоке.

## Сводные представления и панели

Для сводных вычислений панели задайте `notExecuteCalculation: true` плагину `UniverBaseDashboardPlugin` в основном потоке и зарегистрируйте `UniverRemoteBaseDashboardPlugin` в том же Worker. Плагины интерфейса остаются в основном потоке.

```typescript title="main.ts"
import { UniverBaseDashboardPlugin } from '@univerjs-pro/bases-dashboard'

univer.registerPlugin(UniverBaseDashboardPlugin, { notExecuteCalculation: true })
```

```typescript title="worker.ts"
import { UniverRemoteBaseDashboardPlugin } from '@univerjs-pro/bases-dashboard'

univer.registerPlugin(UniverRemoteBaseDashboardPlugin)
```

[^web-worker]: Web Worker выполняет JavaScript вне главного потока браузера и обменивается с ним сообщениями. Прямого доступа к DOM нет: перенос вычислений не переносит интерфейс редактора.
