理解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 相关文章推荐
xmlHTTP实例
Oct 24 Javascript
javaScript同意等待代码实现心得
Jan 01 Javascript
javaScript实现可缩放的显示区效果代码
Oct 26 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
Oct 28 Javascript
JavaScript的ExtJS框架中表格的编写教程
May 21 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
Dec 12 Javascript
基于React实现表单数据的添加和删除详解
Mar 14 Javascript
页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
Aug 29 Javascript
Angular @HostBinding()和@HostListener()用法
Mar 05 Javascript
浅谈Angular单元测试总结
Mar 22 Javascript
js前端面试之同步与异步问题详解
Apr 03 Javascript
9个JavaScript日常开发小技巧
Oct 06 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中for循环语句的几种变型
2007/03/16 PHP
利用curl 多线程 模拟 并发的详解
2013/06/14 PHP
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
JavaScript效率调优经验
2009/06/04 Javascript
一个JS小玩意 几个属性相加不能超过一个特定值.
2009/09/29 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
广泛收集的jQuery拖放插件集合
2012/04/09 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
jquery实现模拟百分比进度条渐变效果代码
2015/10/29 Javascript
javascript滚轮事件基础实例讲解(37)
2017/02/14 Javascript
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
2019/08/27 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
python实现可逆简单的加密算法
2019/03/22 Python
django 解决自定义序列化返回处理数据为null的问题
2020/05/20 Python
Django执行源生mysql语句实现过程解析
2020/11/12 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
美国现代家具和家居商店:Apt2B
2016/08/29 全球购物
全球性的在线商店:Vogca
2019/05/10 全球购物
中学生运动会入场词
2014/02/12 职场文书
常务副总经理岗位职责
2014/04/12 职场文书
中队活动总结
2014/08/27 职场文书
化工实习心得体会
2014/09/09 职场文书
机关作风建设自查报告
2014/10/22 职场文书
安全学习心得体会范文
2016/01/18 职场文书
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis
java版 简单三子棋游戏
2022/05/04 Java/Android
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript