如何在主线程和网络工作者之间共享pouchDB

问题描述 投票:0回答:1

在Web应用程序中,使用pouchDB,我有一个运行缓慢的功能,该功能通过更新数据库中的文档来完成。我想将其从主UI线程移到Web Worker中。但是,我们在主线程中仍然有很多其他使用pouchDB的代码(例如change事件侦听器,以及处理其他文档的代码)。 (作为参考,数据库大小为100MB左右;使用Vue2,因此通常在数据更改时UI可以更新。)

这似乎是我立即解开的地方:

  • 共享内存基本上已用完,因为所有浏览器默认都将其禁用
  • 即使不是,pouchDB也是一个类,不能被传输(?)。
  • 将所有数据库代码(包括更改处理程序)隔离到一个Web worker中是一个巨大的重构;然后我们仍然面临必须将大量数据传入和传出该Web Worker的问题。
  • 也将所有使用数据的代码移动到Web Worker中,并且只是让UI线程来回传递消息,这是一个更大的重构,而且我还没有考虑过它可能如何干扰Vue。

这似乎使我们有两个极端选择。从头开始重写整个应用程序,可能会删除Vue,或者只是在Web Worker中进行缓慢而复杂的计算,然后让它传回结果,然后继续在主UI线程中执行db.put()。 >

这真的是全有还是全无?是否有任何PouchDB“技巧”​​允许与Web Worker一起使用,如果可以,我们是否需要实现锁定?

在Web应用程序中,使用pouchDB,我运行缓慢,该功能通过更新数据库中的文档来完成。我想将其从主UI线程移到Web Worker中。但是,我们有很多...

javascript vue.js web-worker pouchdb
1个回答
0
投票

您缺少一个选项,我会根据您的情况选择。编写一个简单的适配器,使您的工作程序代码可以通过消息查询主线程中的数据库。获取您的数据,在工作进程中进行处理,然后发送回去。

© www.soinside.com 2019 - 2024. All rights reserved.