浅谈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中的选择符
Oct 17 HTML / CSS
用CSS3将你的设计带入下个高度
Aug 08 HTML / CSS
CSS3中各种颜色属性的使用教程
May 17 HTML / CSS
css3的动画特效之动画序列(animation)
Dec 22 HTML / CSS
HTML+CSS3+JS 实现的下拉菜单
Nov 25 HTML / CSS
HTML5 本地存储实现购物车功能
Sep 07 HTML / CSS
HTML5注册表单的自动聚焦与占位文本示例代码
Jul 19 HTML / CSS
HTML5新增元素如何兼容旧浏览器有哪些方法
May 09 HTML / CSS
HTML5 Canvas实现烟花绽放特效
Mar 02 HTML / CSS
HTML5 Canvas 旋转风车绘制
Aug 18 HTML / CSS
html5启动原生APP总结
Jul 03 HTML / CSS
HTML5中input输入框默认提示文字向左向右移动的示例代码
Sep 10 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字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
用js做一个小游戏平台 (一)
2009/12/29 Javascript
DOM基础教程之使用DOM控制表单
2015/01/20 Javascript
javascript 对象数组根据对象object key的值排序
2015/03/09 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
react-redux中connect()方法详细解析
2017/05/27 Javascript
基于JavaScript实现百度搜索框效果
2020/06/28 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
jQuery使用动画队列自定义动画操作示例
2018/06/16 jQuery
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
Python 常用string函数详解
2016/05/30 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
2014/04/03 HTML / CSS
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
化学系大学生自荐信范文
2014/03/01 职场文书
2015年酒店客房部工作总结
2015/04/25 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
运动会观后感
2015/06/09 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
退休欢送会致辞
2015/07/31 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书
决心书格式及范文
2019/06/24 职场文书
八年级作文之友谊
2019/12/02 职场文书
《正面管教》读后有感:和善而坚定的旅程
2019/12/19 职场文书
深入理解go缓存库freecache的使用
2022/02/15 Golang
Nginx限流和黑名单配置
2022/05/20 Servers