1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 解决JS单线程执行

解决JS单线程执行

时间:2023-11-04 03:04:56

相关推荐

解决JS单线程执行

创建一个worker 对象并向它传递将在新线程中执行的脚本的URl

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>递归</title></head><body><input type="text" id="number"><button id="btn">计算</button><script>let input = document.getElementById('number')document.getElementById('btn').onclick = function (){let number = input.value// 创建一个worker 对象并向它传递将在新线程中执行的脚本的URllet worker = new Worker('./worker.js')// 接收worker 传过来的数据函数worker.onmessage = function (event) {console.log('主线程接收分线程返回的数据', event.data)alert(event.data)}// 向分线程发送信息worker.postMessage(number)console.log('主线程向分线程发送数据请求' + number)}</script></body></html>

新线程

function countNum(n) {return n <= 2 ? 1 : countNum(n - 1) + countNum(n - 2) //----->递归调用}// 只能用函数表达式var onmessage = function (event){var number = event.data// 通过event.data获得发送来的数据var result = countNum(number)// 返回数据给主线程postMessage(result)console.log('分线程返回数据给主线程' + result)}

Workers 是html5提供的一个JavaScript多线程解决方案

我们可以将一些大计算量的代码交由web Worker运行而不冻结用户界面

但是主线程完全受主线程控制,且不得操作DOM。

所以,这个新标准并没有改变JavaScript单线程的本质

Worker:构造函数,加载分线程执行的js文件

Worker.prototype.onmessage:用于接收另外一个线程的回调函数

Worker.prototype.postMessage:向另一个现场发送消息

不足

worker内代码不能操作DOM(更新UI)

不能跨域加载JS

不是每个浏览器都支持这个新特性

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。