解决JS单线程执行

创建一个worker 对象并向它传递将在新线程中执行的脚本的URl

 




  
  
  
  递归


  
  
  

新线程

function countNum(n) {
  return n <= 2 ? 1 : countNum(n - 1) + countNum(n - 2)   //----->递归调用
}
// 只能用函数表达式
var onmessage = function (event){
  var number = event.data
  // 通过event.data获得发送来的数据
  var result = countNum(number)
  // 返回数据给主线程
  postMessage(result)
  console.log('分线程返回数据给主线程' + result)
}

 Workers 是html5提供的一个JavaScript多线程解决方案

  1. 我们可以将一些大计算量的代码交由web Worker运行而不冻结用户界面

  2. 但是主线程完全受主线程控制,且不得操作DOM。

  3. 所以,这个新标准并没有改变JavaScript单线程的本质

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

  2. Worker.prototype.onmessage:用于接收另外一个线程的回调函数

  3. Worker.prototype.postMessage:向另一个现场发送消息

 不足

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

  2. 不能跨域加载JS

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

你可能感兴趣的:(javascript,前端,开发语言)