Advertisement
fcamuso

Javascript Lezione 72

Aug 26th, 2022
1,176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //worker.js
  2. addEventListener('message', (parametroDalMainScript) => {
  3.   console.log('webworker partito');
  4.   console.log(`Ricevuto valore dal main: ${parametroDalMainScript.data}`);
  5.   const generati = generatePrimi(parametroDalMainScript.data);
  6.  
  7.   console.log('Restituisco i numeri primi al main');
  8.   postMessage(generati);
  9. });
  10.  
  11. function generatePrimi(quota) {
  12.   let generati = [];
  13.   let cont=0;
  14.  
  15.   console.log(`Generazione partita, obiettivo ${quota} numeri ...`);
  16.   console.log(`Dimensione iniziale array ${generati.length} numeri ...`);
  17.  
  18.   const MAX_PRIME = 1000000;
  19.   const random = (max) => Math.floor(Math.random() * max);
  20.  
  21.   const isPrime = function (n){
  22.     for (let i = 2; i <= Math.sqrt(n); i++) {
  23.       if (n % i === 0) {
  24.         return false;
  25.       }
  26.     }
  27.     return n > 1;
  28.   }
  29.  
  30.   while (cont < quota) {
  31.     const candidate = random(MAX_PRIME);
  32.     if (isPrime(candidate) )
  33.     { cont++;
  34.       if (cont<100) generati.push(candidate);
  35.     }
  36.   }
  37.  
  38.   console.log(`Generazione terminata, ${generati}`);
  39.   return generati;
  40.  
  41.  
  42. }
  43.  
  44. //main.html
  45. <!DOCTYPE html>
  46. <html lang="en">
  47. <head>
  48.   <meta charset="UTF-8">
  49.   <meta http-equiv="X-UA-Compatible" content="IE=edge">
  50.   <meta name="viewport" content="width=device-width, initial-scale=1.0">
  51.   <title>Document</title>
  52. </head>
  53. <body>
  54.  
  55.   Quanti numeri generare <input type="text" id="quanti">
  56.   <button id="genera">Genera</buttn>
  57.   <button id="stop">STOP</button>
  58.   <br><br>
  59.   <div id="output">   </div>
  60.  
  61.   <script>
  62.  
  63.     // async function f(url)
  64.     // {
  65.     //   let promise = fetch('https://anime-facts-rest-api.herokuapp.com/api/v1');
  66.  
  67.     //   let datiRestituitiDalWorker = await promise; //attendi (ma senza bloccare tutto!) la risposta
  68.  
  69.     //   console.log("Ho ottenuto la risposta!");
  70.  
  71.     //   return 999;
  72.     // }
  73.  
  74.     // console.log(f());
  75.  
  76.     // for (let i=0; i<1000;i++) console.log(i);
  77.  
  78.     const worker = new Worker('worker.js');
  79.  
  80.     //quando il worker comandera' un postMessagge lo riceveremo qui sull'evento onmessage (e viceversa)
  81.     worker.addEventListener('message', function (datiRestituitiDalWorker) {    
  82.           output.innerHTML=`Finito, generati ${datiRestituitiDalWorker.data.length} numeri primi. Listo al max i primi 10:<br>`;
  83.           datiRestituitiDalWorker.data.slice(0, Math.min(10, datiRestituitiDalWorker.data.length))
  84.             .forEach(element => output.innerHTML += element + '<br>');
  85.         });
  86.  
  87.     document.getElementById('genera')
  88.       .addEventListener('click', function () {
  89.  
  90.         //attiviamo il worker
  91.         worker.postMessage(document.getElementById('quanti').value);
  92.       });
  93.      
  94.  
  95.     document.getElementById('stop')
  96.       .addEventListener('click', _ => document.location.reload());
  97.  
  98.  
  99.   </script>
  100. </body>
  101. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement