В веб-приложении, использующем pouchDB , у меня есть медленно работающая функция, которая завершается обновлением документа в БД. Я хочу переместить его из основного потока пользовательского интерфейса в веб-работника. Тем не менее, у нас есть много другого кода, использующего pouchDB, по-прежнему в основном потоке (например, прослушиватель событий change
, но также и код, который имеет дело с другими документами). (Для справки размер базы данных составляет порядка 100 МБ; используется Vue2, поэтому, как правило, пользовательский интерфейс может обновляться при изменении данных.)
Здесь я, кажется, сразу же отклеиваюсь:
- Общая память в основном отсутствует, так как все браузеры отключают ее по умолчанию
- Даже если это не так, pouchDB является классом и не может быть передан (?).
- Изоляция всего кода БД, включая обработчик изменений, в одного веб-работника - это огромный рефакторинг; и затем у нас все еще остается проблема передачи огромных порций данных в и из этого веб-работника.
- Переместите весь код, который использует данные, также в веб-работника, и просто пропустите поток пользовательского интерфейса Сообщения туда и обратно, это еще больший рефакторинг, и я не думал, как это может помешать Vue.
Это, кажется, оставляет нам выбор из двух крайностей. Либо переписайте все приложение с нуля, возможно, отбросив Vue, либо просто сделайте медленный, сложный расчет в веб-работнике, затем попросите его вернуть результат и продолжить выполнение db.put()
в основном потоке пользовательского интерфейса. .
Это действительно ситуация "все или ничего"? Существуют ли какие-либо «хитрости» PouchDB, позволяющие работать с веб-работниками, и если да, то потребуется ли нам блокировка?