本篇文章仅供我自己学习使用,不建议从这篇文章中学习。因为文章中可能有错误。
传统的js都是单线程,webworker的引入就是为了解决js只有单线程的问题。在进行科学计算,密集型计算的时候webworker不会阻塞页面,这样对用户体验会有很好的提升。
但是webWorker和传统语言的多线程还不一样,webworker里面的内容和主线程内容只能通过onmessage和postmessage进行通信,不能共享变量,所以不需要像其他语言那样在进行多线程的时候加锁开锁。webWorker的多线程更像是在本地浏览器内开了一个微型服务器,微型服务器进行一些复杂的计算,和主线程进行通信。
同源限制
分配给 Worker 线程运行的脚本文件,必须与主线程的脚本文件同源。
dom限制
worker内的全局对象与主线程不已昂,无法使用document、window这些对象。但是,worker线程可以使用navigator对象和location对象。(navigator对象包含所有的浏览器信息。)。(Location 对象包含有关当前 URL 的信息。)
通信联系
worker线程和主线程不在同一个上下文环境,不能直接通信,需要通过消息。
脚本限制
worker线程不能使用alert()方法和confirm方法,但是可以使用XMLHttpRequest 对象发送ajax请求。试验了,确实可以发送ajax请求。
文件限制
worker线程无法读取本地文件,即不能打开本机的文件系统(file://)。