前端开启多线程 Web Worker

Web Worker为Web内容在后台线程中运行脚本提供了一种简单的方法。线程可以执行任务而不干扰用户界面

  • Worker必须在服务器才能用Worker的api
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <!-- first: -->
  11. first:<input type="text" id="first"></br>
  12. second:<input type="text" id="second">
  13. <script>
  14. const myWorker = new Worker('./work.js')
  15. const first = document.querySelector('#first')
  16. const second = document.querySelector('#second')
  17. first.onchange = function () {
  18. myWorker.postMessage([first.value, second.value]);
  19. console.log('first:Message posted to worker');
  20. }
  21. second.onchange = function () {
  22. myWorker.postMessage([first.value, second.value]);
  23. console.log('second:Message posted to worker');
  24. }
  25. myWorker.onmessage=function(e){
  26. console.log("回传主线程的内容"+e.data)
  27. }
  28. </script>
  29. </body>
  30. </html>

work.js

  1. onmessage = function (e) {
  2. console.log('Message received from main script');
  3. var workerResult = 'Result: ' + (e.data[0] * e.data[1]);
  4. console.log('Posting message back to main script');
  5. postMessage(workerResult);
  6. //close() 终止线程
  7. }

终止Worker

  1. myWorker.terminate();
  2. worker线程中,workers 也可以调用自己的 close 方法进行关闭
  3. close()