前言大家好。我是林三鑫。用最通俗易懂的语言解释最难的知识点是我的座右铭。奇怪的事情——WebWorkerjs为什么是单线程语言?先说说为什么JavaScript是单线程语言?我们都知道JavaScript是一门基于前端的语言,而前端的舞台就是浏览器,而浏览器拿什么取悦用户呢?传过来的是一个个DOM节点组成的页面。因此,JavaScript的最终目标一定是页面呈现的质量。JavaScript作为单线程语言的设计也是为了页面。假设JavaScript是一种多线程语言。如果有一天,线程1正在修改DOM节点,线程2也在修改同一个DOM节点,那么页面该听谁的呢?这样会造成冲突,而这在用户面前是不允许的,所以JavaScript被设计为单线程语言,你要操作的一切都必须按顺序进行。网络工作者?背景刚才说了JavaScript是单线程语言,这也造成了很多问题。不知道大家在平时开发的时候有没有遇到过这样的事情:处理一个超大的数据,导致整个代码的逻辑一时卡死。说说我遇到的场景:1.大文件切片上传带hash2.树数据前端处理时,需要短时间处理。这可能会导致什么样的假死问题?1.页面渲染的阻塞2.后续代码执行的阻塞是什么?WebWorker是为解决浏览器假死问题而构思的新技术。它是一个多线程模型,也是基于主机的。它在JavaScript线程中属于子线程,完全由主线程控制,但在WebWorker中无法操作DOM。需要保证DOM的唯一性,所以不能改变主调,但是需要一个新的线程来分担复杂的计算任务,这就是WebWorker的兼容性:WebWorker有以下特点:1.一旦创建,它不会被主线程打断。即使主线程卡住了,WebWorker还在运行。2、WebWorker也受到同源策略的限制,只能访问同源网页。3、不能操作和访问DOM。前面说了DOM的多线程操作容易引起冲突,所以禁止4.不能使用全局交互方法(alert、confirm等),其他全局方法基本可以使用。5.不能读取本地文件(其实浏览器本身是禁止JavaScript读取本地文件的,出于安全考虑)6.工作线程和主线程不共享作用域和资源。7、WebWorker有两种类型:DedicatedWebWorker:专用线程,只能在一个网页中使用SharedWebWorker:共享线程,可以在多个同源网页中共享。也是跨页面传播的手段之一。使用WebWorker场景,为了让大家看到WebWorker的效果,我新建了几个文件//index.html
