WebWorker загружается только иногда на Android - PullRequest
0 голосов
/ 22 февраля 2019

В нашем приложении Ionic у нас есть веб-работник, который делает некоторые вычисления.

Раньше это работало нормально, но теперь внезапно возникают некоторые проблемы.В нашем приложении было довольно много изменений, но я удалил большую часть кода, чтобы точно определить ошибку, но я ничего не выяснил.

В результате получается, что все работает нормально, но кодвнутри веб-работника никогда не выполняется.Там также не выдается ошибка.Когда я регистрирую веб-работника, когда он не работает, Chrome регистрирует > Worker {}, если он работает, он регистрирует > Worker.Похоже, что веб-работник по какой-то причине не инициализирован.

Код внутри приложения:

const libWorker = new Worker('./assets/workers/lib.js')
console.log(libWorker) // Logs either "Worker {}" or "Worker"
libWorker.onmessage = event => {
    console.log('WORKER CALLBACK')
}
libWorker.postMessage({ ... })

Код в веб-приложении:

console.log("worker started!")

Проблема заключается в следующем:

Почти каждый раз, когда запускается этот код, worker started! не регистрируется, и кажется, что веб-работник не инициализирован, но ошибки нет.

Вот что я знаю:

  • Код иногда работает на Android (примерно в 5% случаев или меньше), поэтому импорт и использование правильные.
  • Я удалил весь код внутри веб-разработчика, за исключением console.log("worker started!");
  • Скорее всего, это не проблема синхронизации, я попытался заключить код в несколько setTimeout s, чтобы сделатьУбедитесь, что все готово и достаточно времени для загрузки.
  • Тот же код работает без сбоев, 100% времени, на iOS и в браузере (Chrome).
  • Нет ошибоквошли в любом случае (я подключил прослушиватель событий для прослушивания ошибок)

Что действительно затрудняет отладку, так это то, что никогда не появляется никакого сообщения об ошибке, если веб-работник не инициализирован.Только когда он инициализируется (примерно в 5% случаев) и код веб-работника содержит синтаксическую ошибку, он выдает ошибку.Похоже, что по некоторым причинам new Worker() фактически не вызывается большую часть времени.

1 Ответ

0 голосов
/ 01 марта 2019

Эта проблема была волшебным образом решена в выходные.

Я думаю, что проблема заключалась в том, что код веб-работника был каким-то образом кэширован и поэтому не отражал изменения, которые я внес в приложение.

...