HTML5 WebWorker的简介、使用场景和局限性

简介

JavaScript 语言采用的是单线程模型,所有任务只能在一个线程上完成,一次只能做一件事。前面的任务没做完,后面的任务只能等着。随着电脑计算能力的增强,尤其是多核 CPU 的出现,单线程带来很大的不便,无法充分发挥计算机的计算能力。Web Worker 的作用,就是为 JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行。在主线程运行的同时,Worker 线程在后台运行,两者互不干扰。等到 Worker 线程完成计算任务,再把结果返回给主线程。这样的好处是,一些计算密集型或高延迟的任务,被 Worker 线程负担了,主线程(通常负责 UI 交互)就会很流畅,不会被阻塞或拖慢。**Worker 线程一旦新建成功,就会始终运行,不会被主线程上的活动(比如用户点击按钮、提交表单)打断。**这样有利于随时响应主线程的通信。但是,这也造成了 Worker 比较耗费资源,不应该过度使用,而且一旦使用完毕,就应该关闭。

使用

  1. Worker 创建一个worker对象
  2. worker.onmessage=func 监听子线程发回的消息
  3. worker.postMessage(your message) 向子线程发送消息
  4. worker.οnerrοr=func 可以监听错误信息
  5. 子线程中需要绑定一个监听函数,监听message事件
addEventListener('message', function (e) {
  postMessage(e.data);
}, false);
  1. worker.terminate() 关闭worker

使用场景

  1. 计算量庞大
  2. worker中可以通过importScript(url)来加载其他文件
  3. 可以使用XMLHttpRequest来发送请求

局限性

  1. 同源限制,分配给worker线程的文件,必须与主线程同源
  2. DOM限制,子线程中无法访问主线程所在网页的dom对象,无法使用document、window、parent等对象
  3. 通信限制,主线程和子线程必须通过postMessage进行通信
  4. 脚本限制,worker线程中不允许使用alert()和confirm()
  5. 文件限制,worker线程无法读取本地文件,只能是来自网络的文件

参考

Web Worker 使用教程

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只月月鸟呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值