Welcome to the website navigation,本站只接受合法正规的企业网站,欢迎站长们提交你的网站获得展示和流量有任何问题请联系站长,欢迎大家加入本站。

                
提交网站
  • 网站:76083
  • 待审:5
  • APP:577
  • 文章:304411
  • 会员:56004
文字内链包年1000元 文字内链包年1000元 文字内链包年1000元 AI办公网站 AI绘画工具 AIchat

名站网址导航名站网址导航小编为爱好网页hTML5的朋友提供关于网页hTML5的相关知识。

  • 本篇文章的具体介绍如下

一个浏览器至少存在三个线程:js引擎线程(处理js)、GUI渲染线程(渲染页面)、浏览器事件触发线程(控制交互)。p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

JavaScript引擎是基于事件驱动单线程执行的,JS引擎一直等待着任务队列中任务的到来然后加以处理,浏览器无论再什么时候都只有一个JS线程在运行JS程序。p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

GUI 渲染线程负责渲染浏览器界面,当界面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行。但需要注意 GUI渲染线程与JS引擎是互斥的,当JS引擎执行时GUI线程会被挂起,GUI更新会被保存在一个队列中等到JS引擎空闲时立即被执行。p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

事件触发线程,当一个事件被触发时该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理。这些事件可来自JavaScript引擎当前执行的具体代码块如setTimeOut、也可来自浏览器内核的其他线程如鼠标点击、AJAX异步请求等,但由于JS的单线程关系所有这些事件都得排队等待JS引擎处理。p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

了解了浏览器的内核处理方式就不难理解浏览器为什么会进入假死状态了,当一段JS脚本长时间占用着处理机就会挂起浏览器的GUI更新,而后面的事件响应 也被排在队列中得不到处理,从而造成了浏览器被锁定进入假死状态。另外JS脚本中进行了DOM操作,一旦JS相关调用结束就会马上进行一次GUI渲染,然后才 开始执行下一个任务,所依JS中大量的DOM操作也会导致事件响应缓慢甚至真正卡死浏览器,如在IE6下一次插入大量的网页hTML。而如果真的弹出了“脚本 运行时间过长“的提示框则说明您的JS脚本肯定有死循环或者进行过深的递归操作了。p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

现在如果遇到了这种情况,咱们可以做的不仅仅是优化 具体代码,html5的webWorkers提供了js的后台处理线程的API,它允许将复杂耗时的单纯js逻辑处理放在浏览器后台线程中进行处理,让js线 程不阻塞UI线程的渲染。这个线程不能和页面进行交互,如获取网页元素、alert等。多个线程间也是可以通过相同的实用具体的方法进行数据传递。p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

直接看具体代码:p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

例子:用户输入一个数字,进行加法运算( =)p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

以前的做法:p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

     
 
  1. <!DOCTYPE 网页hTML> 
  2. <html lang="en"> 
  3. <head> 
  4.     <meta charset="UTF-8"> 
  5.     <title>webworkers--calculate</title></head> 
  6. <body> 
  7.     <input id="num" name="num" type="text"/> 
  8.     <button onclick = "calculate()">计算</button><br /> 
  9.     <div id="result" style="color:red;"></div> 
  10.     <div id="time" style="color:red;"></div> 
  11.     <script type="text/javascript" src="calculate.js"></script> 
  12.     <script type="text/javascript">        function calculate(){  
  13.             data1 = new Date().getTime();  
  14.             var num = document.getElementById("num").value;  
  15.             var val = parseInt(num,10);  
  16.             var result =0;  
  17.             for(var i =0; i<num;i ){  
  18.                 result  = i;  
  19.             }  
  20.             data2 = new Date().getTime();  
  21.             document.getElementById("result").inner网页hTML ="计算结果:" result;  
  22.             document.getElementById("time").inner网页hTML ="普通 耗时:"  (data2 - data1) "ms";  
  23.         }  
  24.     </script> 
  25. </body> 
  26. </html> 

使用webWorkers以后:p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

calculate.htmlp24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

     
 
  1. <!DOCTYPE 网页hTML> 
  2. <html lang="en"><head> 
  3.     <meta charset="UTF-8"> 
  4.     <title>webworkers--calculate</title> 
  5. </head> 
  6. <body> 
  7.     <input id="num" name="num" type="text"/> 
  8.     <button onclick = "calculate()">计算</button><br /> 
  9.     <div id="result" style="color:red;"></div> 
  10.     <div id="time" style="color:red;"></div> 
  11.     <script type="text/javascript" src="calculate.js"></script> 
  12.     <script type="text/javascript"> 
  13.         var worker = new Worker("calculate.js");  
  14.         var data1 =0;  
  15.         var data2 =0;  
  16.         worker.onmessage = function(event){  
  17.                 var data = event.data;  
  18.                 data2 = new Date().getTime();  
  19.                 document.getElementById("result").inner网页hTML ="计算结果:" data;  
  20.                 document.getElementById("time").inner网页hTML ="workers 耗时:"  (data2 - data1) "ms";  
  21.             };  
  22.          function calculate(){  
  23.             data1 = new Date().getTime();  
  24.             var num = document.getElementById("num").value;   
  25.            var val = parseInt(num,10);  
  26.             worker.postMessage(val);  
  27.         }  
  28.     </script> 
  29. </body> 
  30. </html> 

calculate.jsp24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

     
 
  1. onmessage = function(event){  
  2.     var num = event.data;  
  3.     var result = 0;  
  4.     for(var i = 0; i<num;i ){  
  5.         result  = i;  
  6.     }  
  7.     postMessage(result);  
  8. }; 

webWorker需要将具体代码放入web服务器中, 如果使用的是localhost请用高版本的chrome浏览器打开,firefox浏览器在处理localhost的时候会出现“Could not get domain!”的错误,关于这个可以参考:https://bugzilla.mozilla.org/show_bug.cgi?id=682450 对比上面的两种实现方式,当计算值达到100亿的时候,普通做法耗时已经很长,且一般会卡死了。p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

webWorkers在Chrome15下的具体效果p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

更正:getTime()返回的应该是毫秒(ms),而不是秒(s)。p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

如下图所示:p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

普通实用具体的方法在Chrome15下的具体效果p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

可见webWorkers在未来的web应用中还是非常有价值的。p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

网页hTML5教程中对id属性的定义与规定p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

p24AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

关于网页hTML5的相关知识就说到这里希望可以帮助朋友们。,

标签:

分享到:

  admin

注册时间:

网站:0 个   APP:3 个  文章:0 篇

  • 76083

    网站

  • 577

    APP

  • 304411

    文章

  • 56004

    会员

赶快注册账号,推广您的网站吧!
文章分类
热门网站
最新入驻APP小程序

宝贝市场2023-02-08

宝贝市场——买手和卖家商品展示

夺宝助手2023-02-08

夺宝助手小程序,查看每日快夺宝平

查诚信2023-02-08

查诚信是一款免费的商业查询工具

车价天天报2023-02-08

快速连接汽车销售,获知汽车最新报

考勤助理小程序2023-02-08

上班签到考勤,实时定位,后台轻松

汽车报价大全查询2023-02-08

汽车报价大全查询提供最新汽车市