理解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 相关文章推荐
Js数组的操作push,pop,shift,unshift等方法详细介绍
Dec 28 Javascript
JS小游戏之仙剑翻牌源码详解
Sep 25 Javascript
js获取图片宽高的方法
Nov 25 Javascript
js判断复选框是否选中及选中个数的实现代码
May 30 Javascript
微信小程序 倒计时组件实现代码
Oct 24 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
Dec 19 Javascript
微信小程序之蓝牙的链接
Sep 26 Javascript
vue获取当前点击的元素并传值的实例
Mar 09 Javascript
Angular HMR(热模块替换)功能实现方法
Apr 04 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
Aug 24 Javascript
IE9 elementUI文件上传的问题解决
Oct 17 Javascript
vue源码nextTick使用及原理解析
Aug 13 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 第二节 数据类型之字符串类型
2012/04/28 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
php分页示例分享
2014/04/30 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
让iframe框架网页在任何浏览器下自动伸缩
2006/08/18 Javascript
js中将多个语句写成一个语句的两种方法小结
2007/12/08 Javascript
javascript 写类方式之九
2009/07/05 Javascript
js列举css中所有图标的实现代码
2011/07/04 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
JS通过ajax动态读取xml文件内容的方法
2015/03/24 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
Web制作验证码功能实例代码
2017/06/19 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
2019/05/14 Javascript
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
python实现按任意键继续执行程序
2016/12/30 Python
Python对List中的元素排序的方法
2018/04/01 Python
pandas 根据列的值选取所有行的示例
2018/11/07 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
NumPy统计函数的实现方法
2020/01/21 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
英国最大的在线床超市:Bed Star
2019/01/24 全球购物
Why do we need Unit test
2013/01/03 面试题
历史学专业推荐信
2013/11/06 职场文书
党员自我剖析材料(群众路线)
2014/10/06 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
生产车间管理制度
2015/08/04 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
通知怎么写?
2019/04/17 职场文书
Python+腾讯云服务器实现每日自动健康打卡
2021/12/06 Python