const isPrime = (number) => { if (number % 2 === 0 && number > 2) { return false; } let start = 2; const limit = Math.sqrt(number); while (start <= limit) { if (number % start++ < 1) { return false; } } return number > 1; }; addEventListener("message", (e) => { const { startTime } = e.data; let n = 0; let total = 0; const THRESHOLD = e.data.value; const primes = []; let previous = startTime; while (++n <= THRESHOLD) { if (isPrime(n)) { primes.push(n); total++; const now = Date.now(); if (now - previous > 250) { previous = now; postMessage({ status: "calculating", count: total, time: Date.now() - startTime, }); } } } postMessage({ status: "done", count: total, time: Date.now() - startTime }); });