ImageVerifierCode 换一换
格式:DOC , 页数:6 ,大小:33KB ,
资源ID:11398086      下载积分:6 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/11398086.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(突袭HTML5之Javascript-API扩展1—Web-Worker异步执行及相关概述.doc)为本站上传会员【w****g】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

突袭HTML5之Javascript-API扩展1—Web-Worker异步执行及相关概述.doc

1、   HTML5 中的 Web Worker 可以分为两种不同线程类型,一个是专用线程 Dedicated Worker,一个是共享线程 Shared Worker。两种类型的线程各有不同的用途,感兴趣的朋友可以了解下啊,或许对你有所帮助   Javascript执行机制   在HTML5之前,浏览器中JavaScript的运行都是以单线程的方式工作的,虽然有多种方式实现了对多线程的模拟(例如:Javascript 中的 setinterval 方法,setTimeout 方法等),但是在本质上程序的运行仍然是由 JavaScript 引擎以单线程调度的方式进行的。在 HTML5 中

2、引入的工作线程使得浏览器端的 Javascript 引擎可以并发地执行 Javascript 代码,从而实现了对浏览器端多线程编程的良好支持。   Javascript中的多线程 - WebWorker   HTML5 中的 Web Worker 可以分为两种不同线程类型,一个是专用线程 Dedicated Worker,一个是共享线程 Shared Worker。两种类型的线程各有不同的用途。   专用型web worker   专用型worker与创建它的脚本连接在一起,它可以与其他的worker或是浏览器组件通信,但是他不能与DOM通信。专用的含义,我想就是这个线程一次只处理一个

3、需求。专用线程在除了IE外的各种主流浏览器中都实现了,可以放心使用。   创建线程   创建worker很简单,只要把需要在线程中执行的JavaScript文件的文件名传给构造函数就可以了。   线程通信   在主线程与子线程间进行通信,使用的是线程对象的postMessage和onmessage方法。不管是谁向谁发数据,发送发使用的都是postMessage方法,接收方都是使用onmessage方法接收数据。postMessage只有一个参数,那就是传递的数据,onmessage也只有一个参数,假设为event,则通过event.data获取收到的数据。   发送JSON数据  

4、 JSON是JS原生支持的东西,不用白不用,复杂的数据就用JSON传送吧。例如:   代码如下:   postMessage({'cmd': 'init', 'timestamp': Date.now()});   处理错误   当线程发生错误的时候,它的onerror事件回调会被调用。所以处理错误的方式很简单,就是挂接线程实例的onerror事件。这个回调函数有一个参数error,这个参数有3个字段:message - 错误消息;filename - 发生错误的脚本文件;lineno - 发生错误的行。   销毁线程   在线程内部,使用close方法线程自己销毁自己。在线程外部

5、的主线程中,使用线程实例的terminate方法销毁线程。   下面从一个例子看线程的基本操作:   HTML代码:   代码如下:   <!DOCTYPE HTML>   <html>   <head>   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   <title>web worker fibonacci</title>   <script type="text/javascript">  

6、 onload = function(){   var worker = new Worker('fibonacci.js');   worker.onmessage = function(event) {   console.log("Result:" + event.data);   };   worker.onerror = function(error) {   console.log("Error:" + error.message);   };   worker.postMessage(40);   }   </script>   </hea

7、d>   <body>   </body>   </html>   脚本文件fibonacci.js代码:   代码如下:   //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.data, 10);   postMe

8、ssage(fibonacci(n));   };   把它们放到相同的目录,运行页面文件,查看控制台,可以看到运行的结果。   这里还有一点,在主线程中,onmessage事件可以使用另外一种方式挂接:   代码如下:   worker.addEventListener('message', function(event) {   console.log("Result:" + event.data);   }, false);   个人觉得很麻烦,不如用onmessage直接。   使用其他脚本文件   工作线程可以使用全局方法importScripts来加载和使用其他

9、的域内脚本文件或者类库。例如下面都是合法的使用方式:   代码如下:   importScripts();/* imports nothing */   importScripts('foo.js'); /* imports just "foo.js" */   importScripts('foo.js', 'bar.js');/* imports two scripts */   导入以后,可以直接使用这些文件中的方法。看一个网上的小例子:   代码如下:   /**   * 使用 importScripts 方法引入外部资源脚本,在这里我们使用了数学公式计算工具库 mat

10、h_utilities.js   * 当 JavaScript 引擎对这个资源文件加载完毕后,继续执行下面的代码。同时,下面的的代码可以访问和调用   * 在资源文件中定义的变量和方法。   **/   importScripts('math_utilities.js');   onmessage = function (event)   {   var first = event.data.first;   var second = event.data.second;   calculate(first,second);   };   function calcula

11、te(first,second) {   //do the calculation work   var common_divisor=divisor(first,second);   var common_multiple=multiple(first,second);   postMessage("Work done! " +   "The least common multiple is " + common_divisor +   " and the greatest common divisor is "+common_multiple);   }   网上也有网友想

12、到了利用这里的importScripts方法解决资源预加载的问题(浏览器预先加载资源,而不会对资源进行解析和执行),道理也很简单。   线程嵌套   在工作线程中还可以在创建子线程,各种操作还是一样的。   同步问题   Worker没有锁的机制,多线程的同步问题只能靠代码来解决(比如定义信号变量)。   共享型SharedWebWorker   共享型web worker主要适用于多连接并发的问题。因为要处理多连接,所以它的API与专用型worker稍微有点区别。除了这一点,共享型web worker和专用型worker一样,不能访问DOM,并且对窗体属性的访问也受到限制。共

13、享型web worker也不能跨越通信。   页面脚本可以与共享型web worker通信,然而,与专用型web worker(使用了一个隐式的端口通信)稍微有点不同的是,通信是显式的通过使用一个端口(port)对象并附加上一个消息事件处理程序来进行的。   在收到web worker脚本的首个消息之后,共享型web worker把一个事件处理程序附加到激活的端口上。一般情况下,处理程序会运行自己的postMessage()方法来把一个消息返回给调用代码,接着端口的start()方法生成一个有效的消息进程。   看网上能找到的的唯一个例子:创建一个共享线程用于接收从不同连接发送过来的指令

14、然后实现自己的指令处理逻辑,指令处理完成后将结果返回到各个不同的连接用户。   HTML代码:   代码如下:   <!DOCTYPE html>   <html>   <head>   <meta charset="UTF-8">   <title>Shared worker example: how to use shared worker in HTML5</title>   <script>   var worker = new SharedWorker('sharedworke

15、r.js');   var log = document.getElementById('response_from_worker');   worker.port.addEventListener('message', function(e) {   //log the response data in web page   log.textContent =e.data;   }, false);   worker.port.start();   worker.port.postMessage('ping from user web page..');   //follow

16、ing method will send user input to sharedworker   function postMessageToSharedWorker(input)   {   //define a json object to construct the request   var instructions={instruction:input.value};   worker.port.postMessage(instructions);   }   </script>   </head>   <body onload=''

17、gt;   <output id='response_from_worker'>   Shared worker example: how to use shared worker in HTML5   </output>   send instructions to shared worker:   <input type="text" autofocus oninput="postMessageToSharedWorker(this);return false;">   </input>   </body>   

18、lt;/html>   脚本文件代码:   代码如下:   // 创建一个共享线程用于接收从不同连接发送过来的指令,指令处理完成后将结果返回到各个不同的连接用户。   var connect_number = 0;   onconnect = function(e) {   connect_number =connect_number+ 1;   //get the first port here   var port = e.ports[0];   port.postMessage('A new connection! The current connection

19、number is '   + connect_number);   port.onmessage = function(e) {   //get instructions from requester   var instruction=e.data.instruction;   var results=execute_instruction(instruction);   port.postMessage('Request: '+instruction+' Response '+results   +' from shared worker...');   };   };

20、   /*   * this function will be used to execute the instructions send from requester   * @param instruction   * @return   */   function execute_instruction(instruction)   {   var result_value;   //implement your logic here   //execute the instruction...   return result_value;   }   在上面的

21、共享线程例子中,在主页面即各个用户连接页面构造出一个共享线程对象,然后定义了一个方法 postMessageToSharedWorker 向共享线程发送来之用户的指令。同时,在共享线程的实现代码片段中定义 connect_number 用来记录连接到这个共享线程的总数。之后,用 onconnect 事件处理器接受来自不同用户的连接,解析它们传递过来的指令。最后,定义一个了方法 execute_instruction 用于执行用户的指令,指令执行完成后将结果返回给各个用户。   这里我们并没有跟前面的例子一样使用到了工作线程的 onmessage 事件处理器,而是使用了另外一种方式 addEv

22、entListener。实际上,前面已经说过,这两种的实现原理基本一致,只是在这里有些稍微的差别,如果使用到了 addEventListener 来接受来自共享线程的消息,那么就要先使用 worker.port.start() 方法来启动这个端口。之后就可以像工作线程的使用方式一样正常的接收和发送消息。   最后陈述   线程中能做的事:   1.能使用setTimeout(), clearTimeout(), setInterval(),clearInterval()等函数。   2.能使用navigator对象。   3.能使用XMLHttpRequest来发送请求。   4.

23、可以在线程中使用Web Storage。   5.线程中可以用self获取本线程的作用域。   线程中不能做的事:   1.线程中是不能使用除navigator外的DOM/BOM对象,例如window,document(想要操作的话只能发送消息给worker创建者,通过回调函数操作)。   2.线程中不能使用主线程中的变量和函数。   3.线程中不能使用有"挂起"效果的操作命令,例如alert等。   4.线程中不能跨域加载JS。   线程也是需要消耗资源的,而且使用线程也会带来一定的复杂性,所以如果没有充足的理由来使用额外的线程的话,那么就不要用它。   

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服