当前位置: 首页 > Web前端 > HTML

WebWork(在主线程中创建子进程)

时间:2023-04-02 12:44:22 HTML

WebWork简介:大家都知道JS是单线程语言。循环计算会导致线程阻塞。由于计算量大,JS后续的运行会阻塞在这里,导致性能不佳,代码可维护性差等一系列问题。也看了很多关于webwork的demo和官方的讲解,都说很多是官方的,不太好理解。在这几天的学习过程中,我也在这方面做了一些功课,发现webwork有着非凡的效果!先代码:letworker=newWorker("work.js")//这里写入要处理的地址letdata=[1,2,3,4,5,6,7]worker.postMessage(data);worker.onmessage=function(event){console.log(event.data)document.querySelector("ul").innerHTML=event.data}//这部分是this.addEventListener("message",(data)=>{letstr=render(data.data)this.postMessage(str)})functionrender(data){letstr=''data.forEach(i=>{str+=`

  • ${i}}li>`});returnstr}正如你所见,这是一个简单的demo:但是你可以看到添加一个简单的console.log(1)后的结果,打开F12(传说中的开发者模式)你会惊讶的发现单线程language其实是先输出1然后在UL里面加一个节点,想想?按照前面的写法,我们肯定会这样:letstr="";data.forEach(i=>{str+=`
  • ${i}
  • `});document.querySelector("ul").客栈erHTML=海峡;你发现好处了吗?简单的说,我们做了一组应该是同步异步的代码,也就是我们在主线程中创建了一个子线程。这样做的好处是不会影响主线程和线程任务的执行。具体步骤在子线程中执行,最后将结果返回给主线程,巧妙地解决了上述问题。如果我有一个任务在主线程中循环10000次(当然是开玩笑的!)这时候webwork是不是很聪明?这个问题怎么办?结语:你为什么要这样做?随着web的发展,时代越来越重视词的优化。使用更优雅简洁的代码来完成任务至关重要。用户需求一直是我们开发人员关注的问题。试想一下,如果某天某用户访问了你的网站,因为你的代码到页面出现了假死现象。这是一件可怕的事情。在深度探索中,每一个优秀的前端工作者都应该在这些问题上努力。作者寄语:文章不多的刘老师,不喜勿怨,发表个人看法。如果大家有更好的建议,希望大家互相帮助,互相学习