理解JavaScript中worker事件api

 更新时间:2015年12月25日 08:46:17   作者:微宇宙  
这篇文章主要帮助大家理解JavaScript中worker事件api,对worker事件api有一个深刻了解,感兴趣的小伙伴们可以参考一下

如果你不是很了解Event事件,建议先这篇文章《理解javascript中DOM事件》

首先,我们需要实例一个Worker的对象,浏览器会根据新创建的worker对象新开一个接口,此接口会处理客户端与indexedDB数据库之间的通信。这里的数据库是指浏览器数据库。如果,你需要判断浏览器是否支持worker对象,详见如下代码。或者浏览器是否支持indexedDB数据库,详见同下,二者判断最好选择前者。因为IE不支持indexedDB 。

if(window.Worker){ dosomething }
// Worker
window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB; 
if(!window.indexedDB){ dosomething }
// indexedDB

之后,worker对象会通过postMessage线程向indexedDB数据库发送数据,当indexedDB数据库接收到客户端发送的数据,首先把数据的键值储存并记录到indexedDB数据库表里面,其实相当于把数据保存在一张结构完整的表内。

于是,indexedDB数据库会把接收到的数据值扔给新接口处理,当新接口获得数据并解析之后,会通过postMessage扔回一条数据给数据库,数据库接收返回的数据处理的方式和上面一样,此时indexedDB数据库会把返回的数据扔给客户端接受参数的onmessage线程,主线程后面onmessage线程主要是接收传回的数据。

var txt1 = document.querySelector("#txt1");
var txt2 = document.querySelector("#txt2");

var result = document.querySelector("#result");
window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
 if(!window.indexedDB)
 {
  console.log("你的浏览器不支持IndexedDB");
 }
 if(window.Worker){
  var _this = new Worker("../../js/build/scroll_ten1.js");
  txt1.onchange = function(){ 
   _this.postMessage([txt1.value,txt2.value]); // e = [txt1.value,txt2.value]
   console.log("message post to work");
  }
  txt2.onchange = function(){
   _this.postMessage([txt1.value,txt2.value]); // e = [txt1.value,txt2.value]
   console.log("message post to work");
  }
  _this.onmessage = function(s){ //接收到的数据 e
   result.textContent = s.data;
  }
 }


onmessage = function(e){ //e接收Worker.postmessage传的参数
 var s = (e.data[2]*e.data[1]);
 var workerResult = "result : " + s;
 postMessage(workerResult); //Worker.onmessage进行回调workerResult参数
}

想必大家看了以上的分析之后,肯定在想用Worker能做什么?对于这个问题,目前能解决线程的非阻塞问题,如何说起,当用户改变browser的的尺寸、以及拖动浏览器时,主线程访问后台数据时,并不会中断数据之间的进程。

支持Worker的browser有哪些?

分享一个链接caniuse,通过这个工具你能更加全面的看到各个浏览器的(hack)。

// *注Worker的首字母必须是大写的

// *注Worker的脚本目录必须是HTML能够访问到的目录

以上就是本文的全部内容,希望对大家深入理解JavaScript中worker事件api有所帮助。

相关文章

  • js中易弄混淆的"位置"相关属性详解

    js中易弄混淆的"位置"相关属性详解

    js中有各种位置相关的属性,平时用起来比较混乱,特此整理一下,下面这篇文章主要给大家介绍了关于js中易弄混淆的“位置”相关属性的相关资料,需要的朋友可以参考下
    2022-04-04
  • js深度合并两个数组对象的实现

    js深度合并两个数组对象的实现

    这篇文章主要介绍了js深度合并两个数组对象的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • javascript+css实现单击颜色褪去效果

    javascript+css实现单击颜色褪去效果

    javascript+css实现单击颜色褪去效果...
    2007-08-08
  • 浅谈JavaScript异常处理语句

    浅谈JavaScript异常处理语句

    考虑到 JS 中的错误可比服务器端的代码产生的错误要多得多,并且还难以发现及修正,所以 JS 代码必须有异常处理以及全局一场处理。
    2015-06-06
  • 微信小程序实现电子签名

    微信小程序实现电子签名

    这篇文章主要为大家详细介绍了微信小程序实现电子签名,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • javascript中call,apply,callee,caller用法实例分析

    javascript中call,apply,callee,caller用法实例分析

    这篇文章主要介绍了javascript中call,apply,callee,caller用法,结合实例形式分析了javascript中call,apply,callee,caller功能、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-07-07
  • JavaScript实现图片轮播组件代码示例

    JavaScript实现图片轮播组件代码示例

    本篇文章主要介绍了JavaScript实现图片轮播组件代码示例,对图片轮播效果感兴趣的小伙伴们可以参考一下。
    2016-11-11
  • javascript实现留言板功能

    javascript实现留言板功能

    这篇文章主要为大家详细介绍了javascript实现留言板功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • js采用map取到id集合组并且实现点击一行选中一行

    js采用map取到id集合组并且实现点击一行选中一行

    本文为大家介绍下如何使用js采用map取到id集合组,并且点击一行选中一行
    2013-12-12
  • js字符串转换为对象格式的三种方法总结

    js字符串转换为对象格式的三种方法总结

    关于js里面的字符串转对象,又或者是对象转为字符串,都是平时开发应用是经常用到的知识点,下面这篇文章主要给大家介绍了关于js字符串转换为对象格式的三种方法,需要的朋友可以参考下
    2022-12-12

最新评论