您现在的位置是:网站首页> 编程资料编程资料
针对HTML5的Web Worker使用攻略HTML5之web workers_动力节点Java学院整理HTML5 Web Workers之网站也能多线程的实现浅谈HTML5 Web Worker的使用
2021-08-31
1013人已围观
简介 这篇文章主要介绍了针对HTML5的Web Worker使用攻略,特别是结合worker拿手的JS使用起来十分有效,需要的朋友可以参考下
Web Workers 是 HTML5 提供的一个javascript多线程解决方案,我们可以将一些大计算量的代码交由web Worker运行而不冻结用户界面。
一:如何使用Worker
Web Worker的基本原理就是在当前javascript的主线程中,使用Worker类加载一个javascript文件来开辟一个新的线程,起到互不阻塞执行的效果,并且提供主线程和新线程之间数据交换的接口:postMessage,onmessage。
那么如何使用呢,我们看一个例子:
- //worker.js
- onmessage =function (evt){
- var d = evt.data;//通过evt.data获得发送来的数据
- postMessage( d );//将获取到的数据发送会主线程
- }
HTML页面:test.html
- >
- <html>
- <<span style="width: auto; height: auto; float: none;" id="20_nwp"><a style="text-decoration: none;" mpid="20" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=619521ab1ccffd45&k=head&k0=head&kdi0=0&luki=6&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=45fdcf1cab219561&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1183%2Ehtml&urlid=0" id="20_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">headspan>a>span>>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <script type="text/<span style="width: auto; height: auto; float: none;" id="21_nwp"><a style="text-decoration: none;" mpid="21" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=619521ab1ccffd45&k=javascript&k0=javascript&kdi0=0&luki=9&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=45fdcf1cab219561&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1183%2Ehtml&urlid=0" id="21_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">javascriptspan>a>span>">
- //WEB页主线程
- var worker =new Worker("worker.js"); //创建一个Worker对象并向它传递将在新线程中执行的脚本的URL
- worker.postMessage("hello world"); //向worker发送数据
- worker.onmessage =function(evt){ //接收worker传过来的数据<span style="width: auto; height: auto; float: none;" id="22_nwp"><a style="text-decoration: none;" mpid="22" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=619521ab1ccffd45&k=%BA%AF%CA%FD&k0=%BA%AF%CA%FD&kdi0=0&luki=2&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=45fdcf1cab219561&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1183%2Ehtml&urlid=0" id="22_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">函数span>a>span>
- console.log(evt.<span style="width: auto; height: auto; float: none;" id="23_nwp"><a style="text-decoration: none;" mpid="23" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=619521ab1ccffd45&k=data&k0=data&kdi0=0&luki=4&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=45fdcf1cab219561&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1183%2Ehtml&urlid=0" id="23_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">dataspan>a>span>); //输出worker发送来的数据
- }
- script>
- head>
- <body>body>
- html>
用Chrome浏览器打开test.html后,控制台输出 ”hello world” 表示程序执行成功。
通过这个例子我们可以看出使用web worker主要分为以下几部分
WEB主线程:
1.通过 worker = new Worker( url ) 加载一个JS文件来创建一个worker,同时返回一个worker实例。
2.通过worker.postMessage( data ) 方法来向worker发送数据。
3.绑定worker.onmessage方法来接收worker发送过来的数据。
4.可以使用 worker.terminate() 来终止一个worker的执行。
worker新线程:
1.通过postMessage( data ) 方法来向主线程发送数据。
2.绑定onmessage方法来接收主线程发送过来的数据。
二:Worker能做什么
知道了如何使用web worker ,那么它到底有什么用,可以帮我们解决那些问题呢。我们来看一个fibonacci数列的例子。
大家知道在数学上,fibonacci数列被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*),而javascript的常用实现为:
- var fibonacci =function(n) {
- return n <2? n : arguments.callee(n -1) + arguments.callee(n -2);
- };
- //fibonacci(36)
在chrome中用该方法进行39的fibonacci数列执行时间为19097毫秒 ,而要计算40的时候浏览器直接提示脚本忙了。
由于javascript是单线程执行的,在求数列的过程中浏览器不能执行其它javascript脚本,UI渲染线程也会被挂起,从而导致浏览器进入僵死状态。使用web worker将数列的计算过程放入一个新线程里去执行将避免这种情况的出现。具体看例子:
- //fibonacci.js
- var fibonacci =function(n) {
- return n <2? n : arguments.callee(n -1) + arguments.callee(n -2);
- };
- onmessage =function(event) {
- var n = parseInt(event."width: auto; height: auto; float: none;" id="16_nwp">"text-decoration: none;" mpid="16" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=619521ab1ccffd45&k=data&k0=data&kdi0=0&luki=4&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=45fdcf1cab219561&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1183%2Ehtml&urlid=0" id="16_nwl">"color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">data, 10);
- postMessage(fibonacci(n));
- };
HTML页面:fibonacci.html
- >
- <html>
- <<
提示: 本文由神整理自网络,如有侵权请联系本站删除!
本站声明:
1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持;
2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!
相关内容
- 极简的HTML5模版html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
- 深入探究HTML5的History API详解HTML5之pushstate、popstate操作history,无刷新改变当前urlHTML5 History API 实现无刷新跳转 HTML5 history新特性pushState、replaceState及两者的区别 HTML5学习笔记之History API浅析HTML5中的 History 模式
- HTML5中Localstorage的使用教程HTML5 LocalStorage 本地存储详细概括(多图)html5 localStorage本地存储_动力节点Java学院整理localstorage和sessionstorage使用记录(推荐)详解HTML5 LocalStorage 本地存储 html5本地存储 localStorage操作使用详解HTML5 本地存储 LocalStorage详解解析HTML5中的新功能本地存储localStoragelocalStorage的过期时间设置的方法详解
- HTML5到底会有什么发展?HTML5的前景展望HTML5未来发展趋势
- HTML5新增的8类INPUT输入类型介绍html禁止清除input文本输入缓存的两种方法html5中的input新属性range使用记录HTML5 input placeholder 颜色修改示例HTML 5 input placeholder 属性如何完美兼任ieHTML5 input元素类型:email及url介绍html5 input属性使用示例html4和html5区别之如何在一个input上添加焦点实现代码HTML5 input新增type属性color颜色拾取器的实例代码
- 用HTML5实现鼠标滚轮事件放大缩小图片的功能解决HTML5手机端页面缩放的问题HTML5实现可缩放时钟代码可使任何HTML元素动态缩放适合父元素的js插件scalable.jsHtml5之svg可缩放矢量图形_动力节点Java学院整理HTML5全屏响应式缩放切换幻灯片代码HTML5基于SVG实现可拖拽和缩放的世界地图效果源码HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述HTML5添加禁止缩放功能
- 检测浏览器对HTML5和CSS3支持度的方法2013年五大主流浏览器 HTML5 与 CSS3 兼容性大比拼让你的HTML5&CSS3网站在微软的浏览器中也能运行IE9beta版本浏览器对HTML5/CSS3的支持各大浏览器 CSS3 和 HTML5 兼容速查表 图文不同浏览器对CSS3和HTML5的支持状况HTML5 CSS3新的WEB标准和浏览器支持关于老式浏览器兼容HTML5和CSS3的问题
- HTML5的一个显示电池状态的API简介浅谈HTML5 FileReader分布读取文件以及其方法简介HTML与XHTML、以及HTML4与HTML5标签之间的区别简介HTML5是什么 HTML5是什么意思 HTML5简介HTML5安全介绍之内容安全策略(CSP)简介HTML5的标签的代码的简单介绍 HTML5标签的简介html5新增的定时器requestAnimationFrame实现进度条功能HTML5新增加的功能详解iPhone5和iOS6上HTML5开发的新增功能html5简介及新增功能介绍
- 举例详解HTML5中使用JSON格式提交表单基于HTML5的WebGL实现json和echarts图表展现在同一个界面Html5中localStorage存储JSON数据并读取JSON数据的实现方法HTML5中使用json对象的实例代码
- 用HTML5制作视频拼图的教程HTML5拖拽API经典实例详解HTML5 拖拽批量上传文件的示例代码html5 canvas绘制可拖拽的3D立体文字效果源码html5 canvas绘制的可拖拽全屏3D地球旋转动画特效源码HTML5+Three.js WebGL实现的月球发光着色与拖拽动画效果源码HTML5拖拽的简单实例html5实现的网格图片鼠标拖动拼图游戏源码html5版canvas自由拼图实例HTML5拖拽功能实现的拼图游戏
点击排行
本栏推荐
