
我尝试使用 vite+dexie ,想在 webworker 使用 dexie 防止阻塞主线程,dev 时可以正常跑,build 时就会循环编译,不知道有没有大佬能帮帮我...

import Dexie from 'dexie' import dbWorker from './worker?worker' export const db = new Dexie('test') db.version(1).stores({ test: '++id, test' }) const worker = new dbWorker() export function test(data: string) { worker.postMessage(data) } import { db } from './index' self.addEventListener('message', event => { console.log(db) }) 1 noe132 2022 年 10 月 2 日 说点别的 一是你这个属于循环依赖 二是 dexie 为啥会阻塞主线程,都是异步 IO 目测是因为 worker 类型的循环依赖导致的问题。worker 依赖 index ,index 依赖新 worker ,新 worker 依赖新 worker 的 index ,新 worker 的 index 又依赖新新 worker... |
2/div> subframe75361 OP @noe132 感谢指导!不过我是参照作者在类似的[issue]( https://github.com/dexie/Dexie.js/issues/789#issuecomment-458876237)中提供的样例进行编写的,顺便我不太明白为什么 dev 时没问题,然而 build 的时候就会循环依赖... |
3 zjccc 2022 年 10 月 2 日 @subframe75361 因为 vite 在 dev 时是用到了再加载,build 是会把文件的所有依赖都扫进去 |
4 zjccc 2022 年 10 月 2 日 @subframe75361 示例没什么毛病,主要是你的 `index.ts` 里面不该调用 worker |
5 subframe75361 OP @zjccc 所以是应该把所有关于 dexie 的操作都放到 worker 中吗? |
6 zjccc 2022 年 10 月 2 日 |
7 subframe75361 OP @zjccc 试了一下还真是...十分感谢解惑 |
8 AyaseEri 2022 年 10 月 3 日 worker 里面定一个 class ,constructor 接收一个 db 实例,然后该干嘛干嘛就行了 |