site.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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('tauri', {
  17. __tauriModule: 'Process',
  18. message: {
  19. cmd: 'exit',
  20. exitCode: 0
  21. }
  22. })
  23. }
  24. status.innerHTML = `${prefix} Found <code>${message.data.count}</code> prime numbers in <code>${message.data.time}ms</code>`
  25. if (message.data.status === 'done') {
  26. resolver(message.data.time)
  27. }
  28. }
  29. worker.addEventListener('message', onMessage)
  30. const benchmark = () => {
  31. return new Promise((resolve) => {
  32. const startTime = Date.now()
  33. resolver = resolve
  34. worker.postMessage({ value: THRESHOLD, startTime })
  35. })
  36. }
  37. const calculate = async () => {
  38. let total = 0
  39. for (let i = 0; i < ITERATIONS; i++) {
  40. const result = await benchmark()
  41. total += result
  42. }
  43. const average = total / ITERATIONS
  44. results.innerText = `Average time: ${average}ms`
  45. }
  46. window.addEventListener('DOMContentLoaded', calculate)