Использование "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. Делая это, вам не нужно беспокоиться о том, что код выполняется дважды.