Использование "console.log" внутри Worker в Chrome печатает одно и то же сообщение дважды
Довольно многое, что говорится в названии. Что странно, так это то, что это происходит только при запуске программы на новой вкладке, если вы просто обновляете страницу, для каждого console.log
будет только одно сообщение.
Вот main.js
:
const worker = new Worker('worker.js');
Вот worker.js
:
console.log('Foo bar!');
Вот index.html
:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Web Workers</title>
<style></style>
</head>
<body>
<script src="main.js"></script>
</body>
</html>
То же самое не происходит в Firefox. Я использую Chrome версии 65, что более странно, поскольку дублирующее сообщение, похоже, не относится ни к каким контекстам, указанным в раскрывающемся списке "контексты", поэтому единственное сообщение, указанное при попытке отфильтровать все сообщения консоли, кроме сообщений, отправленных worker.js
- это первое сообщение, второе сообщение (дубликат), по-видимому, не имеет контекстов.
Ответ @bean показал, что уже задан такой вопрос (с февраля 2018 года, я считаю), на который не ответил. Если никто не ответит на этот вопрос, я рассмотрю вопрос о проблеме в форуме по разработке Chrome/независимо.
Ответы
Ответ 1
Это похоже на странное поведение в Chrome, и кто-то опубликовал ту же проблему, что и в Console.log, который дважды регистрировался у веб-работников.
Однако размещение console.log
непосредственно внутри worker.js
не является хорошей практикой. Веб-рабочий работает в отдельном потоке и слушает сообщения, отправленные из main.js
и предпринимает соответствующие действия, поэтому любая бизнес-логика должна быть помещена внутри onmessage
события onmessage
. Делая это, вам не нужно беспокоиться о том, что код выполняется дважды.