理解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 相关文章推荐
jquery中输入验证中一个不错的效果
Aug 21 Javascript
详解jquery uploadify 上传文件
Nov 09 Javascript
分享JavaScript获取网页关闭与取消关闭的事件
Dec 13 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
May 12 Javascript
jQuery的animate函数学习记录
Aug 08 Javascript
JavaScript中的DSL元编程介绍
Mar 15 Javascript
jQuery实现文本展开收缩特效
Jun 03 Javascript
js基于myFocus实现轮播图效果
Feb 14 Javascript
详解javascript中的babel到底是什么
Jun 21 Javascript
用Node编写RESTful API接口的示例代码
Jul 04 Javascript
vue+element实现表格新增、编辑、删除功能
May 28 Javascript
vue v-on:click传递动态参数的步骤
Sep 11 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获取Google AJAX Search API 数据的代码
2010/03/12 PHP
php木马webshell扫描器代码
2012/01/25 PHP
php中this关键字用法分析
2016/12/07 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
php的单例模式及应用场景详解
2021/02/27 PHP
载入进度条 效果
2006/07/08 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
javascript断点调试心得分享
2016/04/23 Javascript
javascript css红色经典选项卡效果实现代码
2016/05/17 Javascript
微信小程序实战之轮播图(3)
2017/04/17 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
2017/07/07 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
2018/05/31 Javascript
Vue实现根据hash高亮选项卡
2019/05/27 Javascript
JS数组属性去重并校验重复数据
2020/01/10 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
Python中生成器和yield语句的用法详解
2015/04/17 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
python实现排序算法解析
2018/09/08 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
pytorch之inception_v3的实现案例
2020/01/06 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
python设置代理和添加镜像源的方法
2020/02/14 Python
浅谈Pytorch torch.optim优化器个性化的使用
2020/02/20 Python
Python多线程通信queue队列用法实例分析
2020/03/24 Python
Python文件操作模拟用户登陆代码实例
2020/06/09 Python
详解用Python爬虫获取百度企业信用中企业基本信息
2020/07/02 Python
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
2012/06/11 面试题
收银出纳员岗位职责
2014/02/23 职场文书
作风大整顿心得体会
2014/09/10 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
李强为自己工作观后感
2015/06/11 职场文书
一定要知道的 25 个 Vue 技巧
2021/11/02 Vue.js