site.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // Copyright 2019-2024 Tauri Programme within The Commons Conservancy
  2. // SPDX-License-Identifier: Apache-2.0
  3. // SPDX-License-Identifier: MIT
  4. // Create web worker
  5. const THRESHOLD = 10000000
  6. const worker = new Worker('worker.js')
  7. /** @type {HTMLButtonElement} */
  8. const start = document.getElementById('start')
  9. /** @type {HTMLParagraphElement} */
  10. const status = document.getElementById('status')
  11. const results = document.getElementById('results')
  12. const ITERATIONS = 1
  13. let resolver
  14. const onMessage = (message) => {
  15. // Update the UI
  16. let prefix = '[Calculating]'
  17. if (message.data.status === 'done') {
  18. // tell tauri that we are done
  19. window.__TAURI__.core.invoke('app_completed_successfully')
  20. }
  21. status.innerHTML = `${prefix} Found <code>${message.data.count}</code> prime numbers in <code>${message.data.time}ms</code>`
  22. if (message.data.status === 'done') {
  23. resolver(message.data.time)
  24. }
  25. }
  26. worker.addEventListener('message', onMessage)
  27. const benchmark = () => {
  28. return new Promise((resolve) => {
  29. const startTime = Date.now()
  30. resolver = resolve
  31. worker.postMessage({ value: THRESHOLD, startTime })
  32. })
  33. }
  34. const calculate = async () => {
  35. let total = 0
  36. for (let i = 0; i < ITERATIONS; i++) {
  37. const result = await benchmark()
  38. total += result
  39. }
  40. const average = total / ITERATIONS
  41. results.innerText = `Average time: ${average}ms`
  42. }
  43. window.addEventListener('DOMContentLoaded', calculate)