# Web Workers

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

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

- Requested language: `ja-JP`

- Content language: `ja-JP`

- Documentation version: `1.1.0`

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

---

Bases は RPC 経由で数式計算を Worker[^web-worker] に移せます。メインスレッドの数式エンジンに `notExecuteFormula: true` を設定し、Worker 側にリモート Bases プラグインと計算用の数式エンジンを登録します。

まず[インストールと基本的な使い方](https://docs.univer.ai/ja-JP/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.JA_JP })
univer.registerPlugin(UniverLicensePlugin, { license: 'your license.txt' })
univer.registerPlugin(UniverProFormulaEnginePlugin)
univer.registerPlugin(UniverRemoteBasesPlugin)
univer.registerPlugin(UniverRPCWorkerThreadPlugin)
```

モジュール Worker と専用のエントリーファイルを使用します。Worker とメインスレッドのパッケージバージョンを揃えてください。描画とユーザー操作はメインスレッドで実行されます。

## ピボットビューとダッシュボード

ダッシュボードのピボット計算には、メインスレッドの `UniverBaseDashboardPlugin` に `notExecuteCalculation: true` を設定し、同じ Worker に `UniverRemoteBaseDashboardPlugin` を登録します。ダッシュボードの UI プラグインはメインスレッドに残します。

```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 には直接アクセスできません。計算を Worker に移しても、エディター UI は移動しません。
