我尝试使用 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-02 10:42:04 +08:00
说点别的
一是你这个属于循环依赖 二是 dexie 为啥会阻塞主线程,都是异步 IO 目测是因为 worker 类型的循环依赖导致的问题。worker 依赖 index ,index 依赖新 worker ,新 worker 依赖新 worker 的 index ,新 worker 的 index 又依赖新新 worker... |
2
subframe75361 OP @noe132 感谢指导!不过我是参照作者在类似的[issue]( https://github.com/dexie/Dexie.js/issues/789#issuecomment-458876237)中提供的样例进行编写的,顺便我不太明白为什么 dev 时没问题,然而 build 的时候就会循环依赖...
|
3
zjccc 2022-10-02 13:14:51 +08:00
@subframe75361 因为 vite 在 dev 时是用到了再加载,build 是会把文件的所有依赖都扫进去
|
4
zjccc 2022-10-02 13:26:03 +08:00
@subframe75361 示例没什么毛病,主要是你的 `index.ts` 里面不该调用 worker
|
5
subframe75361 OP @zjccc 所以是应该把所有关于 dexie 的操作都放到 worker 中吗🧐?
|
6
zjccc 2022-10-02 14:09:13 +08:00 1
|
7
subframe75361 OP @zjccc 试了一下还真是...十分感谢解惑
|
8
AyaseEri 2022-10-03 10:17:15 +08:00 1
worker 里面定一个 class ,constructor 接收一个 db 实例,然后该干嘛干嘛就行了
|