理解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 相关文章推荐
mapper--图片热点区域高亮组件官方站点
Dec 22 Javascript
有趣的JavaScript数组长度问题代码说明
Jan 20 Javascript
JS实现清除指定cookies的方法
Sep 20 Javascript
javascript如何写热点图
Dec 08 Javascript
Angular中点击li标签实现更改颜色的核心代码
Dec 08 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
Aug 12 Javascript
详解Vue源码学习之双向绑定
Apr 10 Javascript
使用layui的layer组件做弹出层的例子
Sep 27 Javascript
vue父子组件间引用之$parent、$children
May 20 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
May 29 Javascript
原生JS实现无缝轮播图片
Jun 24 Javascript
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 Vue.js
基于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新手用的Insert和Update语句构造类
2012/03/31 PHP
php错误级别的设置方法
2013/06/17 PHP
php数组保存文本与文本反编成数组实例
2014/11/13 PHP
php中curl使用指南
2015/02/05 PHP
php校验表单检测字段是否为空的方法
2015/03/20 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
jquery 常用操作方法
2010/01/28 Javascript
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
javascript中兼容主流浏览器的动态生成iframe方法
2014/05/05 Javascript
jQuery深拷贝Json对象简单示例
2016/07/06 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
2017/08/28 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
2018/08/31 Javascript
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
vue中使用element组件时事件想要传递其他参数的问题
2019/09/18 Javascript
vue.js iview打包上线后字体图标不显示解决办法
2020/01/20 Javascript
js实现时钟定时器
2020/03/26 Javascript
Python内置的字符串处理函数整理
2013/01/29 Python
Python基于pillow判断图片完整性的方法
2016/09/18 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
pandas处理csv文件的方法步骤
2020/10/16 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
日本航空官方网站:JAL
2019/06/19 全球购物
如何删除一个表里面的重复行
2013/07/13 面试题
JSF界面控制层技术
2013/06/17 面试题
舞蹈教育学专业推荐信
2013/11/27 职场文书
商场消防演习方案
2014/02/12 职场文书
小学班主任事迹材料
2014/12/17 职场文书
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python