Как сделать Web Worker асинхронным? - PullRequest
0 голосов
/ 14 сентября 2018

Задача состоит в том, чтобы: работать с большим количеством данных в Worker и отображать результат алгоритма после каждой итерации (я отображаю dataObj в HTML).Используя следующий код, вы замедляете работу веб-страницы.Как этого избежать?

onmessage = (e) => {
	let number = 0;
	let totalNumbers = 0;
	let primeNumbers = 0;

	if (e.data === "start"){
		while(true){
			totalNumbers++;
			if (isPrime(number)){
				primeNumbers++;
			}
			number++;

			let dataObj = {
				totalNumbers: totalNumbers,
				primeNumbers: primeNumbers
			}

			postMessage(dataObj);
		}
	} else{
		
	}
}

function isPrime(n) {
  if (n == 2 || n == 3 || n == 5 || n == 7) {
    return true;
  } else if ((n < 2) || (n % 2 == 0)) {
    return false;
  } else {
    for (var i = 3; i <= Math.sqrt(n); i += 2) {
      if (n % i == 0)
        return false;
    }
    return true;
  }
}
...