worker.js 835 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. const isPrime = (number) => {
  2. if (number % 2 === 0 && number > 2) {
  3. return false
  4. }
  5. let start = 2
  6. const limit = Math.sqrt(number)
  7. while (start <= limit) {
  8. if (number % start++ < 1) {
  9. return false
  10. }
  11. }
  12. return number > 1
  13. }
  14. addEventListener('message', (e) => {
  15. const { startTime } = e.data
  16. let n = 0
  17. let total = 0
  18. const THRESHOLD = e.data.value
  19. const primes = []
  20. let previous = startTime
  21. while (++n <= THRESHOLD) {
  22. if (isPrime(n)) {
  23. primes.push(n)
  24. total++
  25. const now = Date.now()
  26. if (now - previous > 250) {
  27. previous = now
  28. postMessage({
  29. status: 'calculating',
  30. count: total,
  31. time: Date.now() - startTime
  32. })
  33. }
  34. }
  35. }
  36. postMessage({ status: 'done', count: total, time: Date.now() - startTime })
  37. })