site.js 1.3 KB

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