浅谈Html5多线程开发之WebWorkers


Posted in HTML / CSS onMay 02, 2018

我们都知道,浏览器执行js代码是单线程的,当页面脚步执行时,页面是没办法响应别的的,直到脚步的结束,而这里介绍的WebWorkers就可以改变这一切。

WebWorkers是运行在后台的js代码,独立于其他脚本,不会影响页面的性能。我们可以继续做任何愿意做的事情:点击、选取内容等等,而此时WebWorkers在后台运行。

所有主流浏览器均支持 web worker,除了 Internet Explorer。

第一步:生成worker。

调用Worker()构造函数,指定一个要在worker线程内运行的脚本的URI,例子是当前页面指定worker线程执行的脚步为script-worker.js。

var myWorker = new Worker("script-worker.js");

在script-worker.js里面我们可以执行额外的代码,这些代码的执行不会影响页面去干别的你想干的事情,这听起来很棒。

第二步:传递数据。

页面可以和worker交互传递数据,这样worker在不影响页面干有意义的事情的情况下可以默默去计算,好了告诉一下页面,使用这些数据。

//[主页面代码]
myWorker.postMessage("data-from-mainpage");

//[worker代码]
onmessage = function (oEvent) {

    console.log("主页面发送过来的数据是:"+oEvent.data));    
};

上面是【主页面发送数据给worker脚本】的情况,是的,你看见了非常亲切的postMessage,好吧,我喜欢这个东西。

//[主页面代码]
 myWorker.onmessage = function (oEvent) {
 
     console.log("worker脚本发送过来的数据是:"+oEvent.data));
     
 }; 
//[worker代码]
postMessage("data-from-mainpage");

上面是【worker脚本发送数据给主页面】的情况,依旧很简单,不过这些只是API,关键在于巧妙的使用才是有益的。

此外,可能worker执行会出错,主页面通过:

myWorker.onerror=function(oEvent){};

可以监听worker发生错误。

第三步:重要几点。

worker线程能够在不干扰UI的情况下执行任务,所执行的JavaScript代码完全在另一个作用域,与当前网页中的代码不共享作用域。

Worker的全局作用域中提供了importScripts()方法,接收一个或多个指向JavaScript文件的URL,加载过程都是异步进行。

importScripts()只会在您提供绝对URI的情况下生效,执行过程也是异步的。

当我们创建WebWorkers对象后,它会继续监听消息(即使在外部脚本完成之后)直到其被终止为止,使用myWorker.terminate()方法可以终止WebWorkers,并释放浏览器/计算机资源。

第四步:重要限制。

1.无法访问DOM节点,无法访问全局变量或是全局函数,法调用alert()或者confirm之类的函数和无法访问window、document之类的浏览器全局变量;

2.不过Web Worker中的Javascript依然可以使用setTimeout(),setInterval()之类的函数,也可以使用XMLHttpRequest对象来做Ajax通信。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
CSS3中动画属性transform、transition和animation属性的区别
Sep 25 HTML / CSS
CSS3 选择器 基本选择器介绍
Jan 21 HTML / CSS
深入浅析css3 border-image边框图像详解
Nov 24 HTML / CSS
CSS3动画:5种预载动画效果实例
Apr 05 HTML / CSS
通过css3的filter滤镜改变png图片的颜色的示例代码
May 06 HTML / CSS
CSS3制作皮卡丘动画壁纸的示例
Nov 02 HTML / CSS
X/HTML5 和 XHTML2
Oct 17 HTML / CSS
HTML5的结构和语义(5):交互
Oct 17 HTML / CSS
HTML5 自动聚焦(autofocus)属性使用介绍
Aug 07 HTML / CSS
html5手机端页面可以向右滑动导致样式受影响的问题
Jun 20 HTML / CSS
浅谈由position属性引申的css进阶讨论
May 25 HTML / CSS
新的CSS 伪类函数 :is() 和 :where()示例详解
Aug 05 HTML / CSS
html5的input的required使用中遇到的问题及解决方法
Apr 24 #HTML / CSS
HTML5轻松实现全屏视频背景的示例
Apr 23 #HTML / CSS
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
Apr 23 #HTML / CSS
HTML5拖拽API经典实例详解
Apr 20 #HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
Apr 19 #HTML / CSS
HTML5实现移动端复制功能
Apr 19 #HTML / CSS
canvas实现漂亮的下雨效果的示例
Apr 18 #HTML / CSS
You might like
随机头像PHP版
2006/10/09 PHP
介绍一些PHP判断变量的函数
2012/04/24 PHP
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
2010/04/29 Javascript
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
ExtJs中gridpanel分组后组名排序实例代码
2013/12/02 Javascript
js获取域名的方法
2015/01/27 Javascript
JS实现的网页倒计时数字时钟效果
2015/03/02 Javascript
推荐10 款 SVG 动画的 JavaScript 库
2015/03/24 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
Bootstrap零基础入门教程(二)
2016/07/18 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
2020/07/26 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
Python中防止sql注入的方法详解
2017/02/25 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
深入了解Python enumerate和zip
2020/07/16 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
2020/11/26 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
2013年保送生自荐信格式
2013/11/20 职场文书
应用艺术专业个人的自我评价
2014/01/03 职场文书
班级安全教育实施方案
2014/02/23 职场文书
《穷人》教学反思
2014/04/08 职场文书
求职信标题怎么写
2014/05/26 职场文书
小学运动会入场口号
2015/12/24 职场文书
幼儿园大班教师评语
2019/06/21 职场文书
详解Java实践之建造者模式
2021/06/18 Java/Android
一文简单了解MySQL前缀索引
2022/04/03 MySQL