浅谈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实现一款模仿iphone样式的注册表单
Mar 20 HTML / CSS
使用CSS3设计地图上的雷达定位提示效果
Apr 05 HTML / CSS
CSS3中伪元素::before和::after的用法示例
Sep 18 HTML / CSS
CSS3改变浏览器滚动条样式
Jan 04 HTML / CSS
详解css3中dispaly的Grid布局与Flex布局
Sep 11 HTML / CSS
html5与css3小应用
Apr 03 HTML / CSS
html5画布旋转效果示例
Jan 27 HTML / CSS
HTML5+CSS3:3D展示商品信息示例
Jan 03 HTML / CSS
HTML5 文件上传下载的实例代码
Jul 03 HTML / CSS
使用html5新特性轻松监听任何App自带返回键的示例
Mar 13 HTML / CSS
css 中多种边框的实现小窍门
Apr 07 HTML / CSS
CSS link与@import的区别和用法解析
May 07 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设计模式之装饰者模式代码实例
2015/05/11 PHP
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
通过身份证号得到出生日期和性别的js代码
2009/11/23 Javascript
jQuery插件开发的五种形态小结
2015/03/04 Javascript
javascript中递归函数用法注意点
2015/07/30 Javascript
JavaScript实现获取某个元素相邻兄弟节点的prev与next方法
2016/01/25 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
canvas绘制爱心的几种方法总结(推荐)
2017/10/31 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
解决layui的table插件无法多层级获取json数据的问题
2019/09/19 Javascript
vue路由传参的基本实现方式小结【三种方式】
2020/02/05 Javascript
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
Python中的pass语句使用方法讲解
2015/05/14 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
将Django项目部署到CentOs服务器中
2018/10/18 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
Python随机数函数代码实例解析
2020/02/09 Python
详解Python IO编程
2020/07/24 Python
如何基于Python按行合并两个txt
2020/11/03 Python
Python3.9.1中使用match方法详解
2021/02/08 Python
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
英文自荐信
2013/12/15 职场文书
《小蝌蚪找妈妈》教学反思
2014/02/21 职场文书
办公室员工岗位工作职责
2014/03/10 职场文书
学校安全防火方案
2014/06/07 职场文书
区域经理岗位职责
2015/02/02 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
百家讲坛观后感
2015/06/12 职场文书
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL