理解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 DIV弹出效果实现代码
Jul 03 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
Jan 15 Javascript
javascript获得网页窗口实际大小的示例代码
Sep 21 Javascript
JavaScript中检测变量是否存在遇到的一些问题
Nov 11 Javascript
Javascript 高阶函数使用介绍
Jun 15 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
Sep 19 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
Oct 10 Javascript
Bootstrap基本组件学习笔记之导航(10)
Dec 07 Javascript
ES6新特性之字符串的扩展实例分析
Apr 01 Javascript
微信小程序实现倒计时补零功能
Jul 09 Javascript
Intellij IDEA搭建vue-cli项目的方法步骤
Oct 20 Javascript
JavaScript Array对象基本方法详解
Sep 03 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
Syphon 使用方法
2021/03/03 冲泡冲煮
FleaPHP的安全设置方法
2008/09/15 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
2014/06/19 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
php 可变函数使用小结
2018/06/12 PHP
GreyBox技术总结(转)
2010/11/23 Javascript
javascript使用location.search的示例
2013/11/05 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
详解angular2 控制视图的封装模式
2018/12/27 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
[05:09]2016国际邀请赛中国区预选赛淘汰赛首日精彩回顾
2016/06/29 DOTA
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
Python编写简单的HTML页面合并脚本
2016/07/11 Python
Python爬虫设置代理IP的方法(爬虫技巧)
2018/03/04 Python
python实现根据文件格式分类
2019/10/31 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
资深生产主管自我评价
2013/09/22 职场文书
生物科学系大学生的自我评价
2013/12/20 职场文书
融资租赁计划书
2014/04/29 职场文书
服务员岗位职责范本
2015/04/09 职场文书
2019年教师节:送给所有老师的祝福语
2019/09/05 职场文书
MySQL中使用or、in与union all在查询命令下的效率对比
2021/05/26 MySQL
详解Go语言Slice作为函数参数的使用
2021/07/02 Golang
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python