理解JavaScript中worker事件api


Posted in Javascript onDecember 25, 2015

如果你不是很了解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有哪些?

理解JavaScript中worker事件api

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

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

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

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

Javascript 相关文章推荐
Windows Live的@live.com域名注册漏洞 利用代码
Dec 27 Javascript
var与Javascript变量隐式声明
Sep 17 Javascript
JavaScript中__proto__与prototype的关系深入理解
Dec 04 Javascript
$("").click与onclick的区别示例介绍
Sep 25 Javascript
浅谈JavaScript 的执行顺序
Aug 07 Javascript
jQuery插件支持同一页面被多次调用
Feb 14 Javascript
JavaScript位移运算符(无符号) >>> 三个大于号 的使用方法详解
Mar 31 Javascript
Vue内容分发slot(全面解析)
Aug 19 Javascript
通过一个简单的例子学会vuex与模块化
Nov 22 Javascript
vue实现文章内容过长点击阅读全文功能的实例
Dec 28 Javascript
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
Mar 15 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
May 09 Javascript
基于jquery实现省市区三级联动效果
Dec 25 #Javascript
js实现文本框输入文字个数限制代码
Dec 25 #Javascript
js实现简单的验证码
Dec 25 #Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
Dec 24 #Javascript
javascript与jquery中的this关键字用法实例分析
Dec 24 #Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
Dec 24 #Javascript
jQuery中hover与mouseover和mouseout的区别分析
Dec 24 #Javascript
You might like
php $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
PHP生成指定随机字符串的简单实现方法
2015/04/01 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
javascript两段代码,两个小技巧
2010/02/04 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
JavaScript运行时库属性一览表
2014/03/14 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
2015/09/20 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
详解Angular.js指令中scope类型的几种特殊情况
2017/02/21 Javascript
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
2017/09/18 Javascript
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
JavaScript用document.write()输出换行的示例代码
2020/11/26 Javascript
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
2014/06/10 Python
Python+django实现文件下载
2016/01/17 Python
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
教你用一行Python代码实现并行任务(附代码)
2018/02/02 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
2018/12/02 Python
python3实现猜数字游戏
2020/12/07 Python
解决Django后台ManyToManyField显示成Object的问题
2019/08/09 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
如何安装并在pycharm使用selenium的方法
2020/04/30 Python
django 装饰器 检测登录状态操作
2020/07/02 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
汉森批发:Hansen Wholesale
2018/05/24 全球购物
学期自我鉴定范文
2013/10/01 职场文书
《赶海》教学反思
2014/04/20 职场文书
搞笑车尾标语
2014/06/23 职场文书
小学课外阅读总结
2014/07/09 职场文书
物业接待员岗位职责
2015/04/15 职场文书
大学生实习证明
2015/06/16 职场文书
活动简报范文
2015/07/22 职场文书
详解Oracle块修改跟踪功能
2021/11/07 Oracle