JS之web workers

h5规范提供了js分线程的实现,取名:web workers

相关API

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

  2.worker.prototype.onmessage 用于接受另一个线程的回调函数

  3.worker.prototype.postmessage 向另一个线程的发送消息

不足:

  1.worker内代码不能操作dom(更新UI)

  2.不能跨域加载JS

  3.不是每一个浏览器都支持这个新的特性

  4.慢

 

 

JS实现斐波那契数列

function fibonaqie(n){
    return n<= 2 ? 1 :fibonaqie(n-1) + fibonaqie(n-2);
}
fibonaqie(10);
递归调用比较慢,一直占用着主线程,页面会被卡住


work.js(分线程)
  // 分线程中的全局对象不再是window,不能更新页面
function fibonaqie(n){
    return n<= 2 ? 1 :fibonaqie(n-1) + fibonaqie(n-2);
}

var onmessage = function (event) {
  var number = event.data
  console.log('分线程接受到主线程发送的数据:'+ number)
  var result = fibonaqie(number)
  postMessage(result)
  console.log('分线程向主线程返回数据:' + result)
  alert(result) // 不能调用,因为alert是主线程window的方法,console是浏览器的方法,不是window的方法
}

script中的代码:
var number = 10
// 创建一个Worker对象
var worker = new Worker('worker.js')
// 绑定接收消息的监听
worker.onmessage = function (event) {
  console.log('主线程接收分线程返回的数据:' + event.data)
  alert (event.data)
}
// 向分线程发送消息
worker.postMessage(number)
console.log('主线程向分线程发送数据:' + number)
console.log(this) // window
 

posted on 2020-11-12 18:19  家有糖果  阅读(155)  评论(0)    收藏  举报

导航