国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

HTML 5 Web開發:防止瀏覽器假死的方法

開發 前端
在Web開發的時候經常會遇到瀏覽器不響應事件進入假死狀態,甚至彈出“腳本運行時間過長“的提示框,如果出現這種情況說明你的腳本已經失控了。

一個瀏覽器至少存在三個線程:js引擎線程(處理js)、GUI渲染線程(渲染頁面)、瀏覽器事件觸發線程(控制交互)。

JavaScript引擎是基于事件驅動單線程執行的,JS引擎一直等待著任務隊列中任務的到來然后加以處理,瀏覽器無論再什么時候都只有一個JS線程在運行JS程序。

GUI 渲染線程負責渲染瀏覽器界面,當界面需要重繪(Repaint)或由于某種操作引發回流(reflow)時,該線程就會執行。但需要注意 GUI渲染線程與JS引擎是互斥的,當JS引擎執行時GUI線程會被掛起,GUI更新會被保存在一個隊列中等到JS引擎空閑時立即被執行。

事件觸發線程,當一個事件被觸發時該線程會把事件添加到待處理隊列的隊尾,等待JS引擎的處理。這些事件可來自JavaScript引擎當前執行的代碼塊如setTimeOut、也可來自瀏覽器內核的其他線程如鼠標點擊、AJAX異步請求等,但由于JS的單線程關系所有這些事件都得排隊等待JS引擎處理。

了解了瀏覽器的內核處理方式就不難理解瀏覽器為什么會進入假死狀態了,當一段JS腳本長時間占用著處理機就會掛起瀏覽器的GUI更新,而后面的事件響應 也被排在隊列中得不到處理,從而造成了瀏覽器被鎖定進入假死狀態。另外JS腳本中進行了DOM操作,一旦JS調用結束就會馬上進行一次GUI渲染,然后才 開始執行下一個任務,所以JS中大量的DOM操作也會導致事件響應緩慢甚至真正卡死瀏覽器,如在IE6下一次插入大量的HTML。而如果真的彈出了“腳本 運行時間過長“的提示框則說明你的JS腳本肯定有死循環或者進行過深的遞歸操作了。

現在如果遇到了這種情況,我們可以做的不僅僅是優化 代碼,html5的webWorkers提供了js的后臺處理線程的API,它允許將復雜耗時的單純js邏輯處理放在瀏覽器后臺線程中進行處理,讓js線 程不阻塞UI線程的渲染。這個線程不能和頁面進行交互,如獲取元素、alert等。多個線程間也是可以通過相同的方法進行數據傳遞。

直接看代碼:

例子:用戶輸入一個數字,進行加法運算(+=)

以前的做法:

  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").innerHTML ="計算結果:"+result;  
  22.             document.getElementById("time").innerHTML ="普通 耗時:"+ (data2 - data1)+"ms";  
  23.         }  
  24.     </script> 
  25. </body> 
  26. </html> 

使用webWorkers以后:

calculate.html

  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").innerHTML ="計算結果:"+data;  
  20.                 document.getElementById("time").innerHTML ="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.js

  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億的時候,普通做法耗時已經很長,且一般會卡死了。

 

 

webWorkers在Chrome15下的效果

更正:getTime()返回的應該是毫秒(ms),而不是秒(s)。

如下圖所示:

 

 

普通方法在Chrome15下的效果

可見webWorkers在未來的web應用中還是非常有價值的。

原文:http://tech.it168.com/a2011/1205/1283/000001283392.shtml

【編輯推薦】

  1. 使用HTML 5制作物理游戲
  2. 51CTO技術沙龍第十七期:HTML 5應用開發經驗分享
  3. HTML 5 Canvas(畫布)教程之圖像處理
  4. 用HTML 5打造斯諾克桌球俱樂部
  5. 使用HTML 5、CSS3和jQuery增強網站用戶體驗
責任編輯:陳貽新 來源: 江柳清的博客
相關推薦

2012-04-23 13:43:02

HTML5瀏覽器

2012-05-07 14:24:15

HTML 5Web App

2012-05-28 13:09:12

HTML5

2018-12-06 09:00:00

LinuxWeb瀏覽器

2020-10-14 09:45:29

Web開發瀏覽器

2017-03-10 19:30:58

Web開發

2012-05-17 09:45:30

2012-11-20 18:00:29

HTML5IE10瀏覽器

2011-05-11 18:00:10

HTML5兼容性

2013-11-22 09:58:36

2009-05-11 09:16:33

騰訊TT瀏覽器

2015-03-10 13:48:06

HTML5開發者HTML5

2011-07-01 13:11:22

Web

2012-05-05 09:17:03

2012-02-10 10:26:55

手機瀏覽器HTML5

2010-04-01 13:03:10

2012-05-08 11:35:01

傲游HTML5

2012-05-27 20:21:40

2011-08-03 17:53:03

注冊表編輯器

2023-03-06 07:43:05

JavaScripDebugger
點贊
收藏

51CTO技術棧公眾號

久久亚洲精华国产精华液| 青草久久伊人| 日韩欧美精品在线视频| 综合久久婷婷| 免费高清在线| 国产精品高潮在线| 久久老女人爱爱| 国外成人福利视频| 日韩中文字幕在线不卡| 欧美精品一区二区久久久| 噜噜噜久久亚洲精品国产品小说| 国产福利在线观看| 91免费在线视频| 狠狠躁18三区二区一区| 99久久精品费精品国产风间由美| 簧片在线观看| 91日本在线观看| 天天综合色天天综合色h| 国产在线日韩精品| 免费看的毛片| 2019精品视频| 亚洲男人的天堂在线aⅴ视频| 琪琪久久久久日韩精品| 日本不卡1区2区3区| 成人激情视频在线播放| 色8久久人人97超碰香蕉987| 亚洲大黄网站| www在线视频| 一区二区三区日韩视频| 在线视频欧美性高潮| 2020日本不卡一区二区视频| 久久99精品久久久久久欧洲站| 国产专区视频| 国产日韩欧美电影在线观看| 色综合色综合色综合色综合色综合| 亚洲网址在线| 福利成人导航| 免费看国产曰批40分钟| 欧美精品videos| 亚洲不卡av一区二区三区| 国产综合婷婷| 国产伦久视频在线观看| 国产免费毛卡片| 日本三级韩国三级久久| 91福利视频在线| 六月丁香综合在线视频| 91成人app| 免费av播放| 精品免费视频123区| 亚洲免费av网址| 国产欧美精品一区二区色综合朱莉 | 国产午夜精品理论片a级大结局| 伦理一区二区| 日本福利在线观看| 自拍偷拍亚洲色图欧美| 欧美极品少妇xxxxⅹ免费视频| 图片区小说区国产精品视频| 亚洲欧美日韩国产一区| 久久人体av| 在线免费黄色毛片| 在线亚洲美日韩| 97久久精品国产| 7799精品视频| 久久精品视频一区二区| 欧美性久久久| 四虎精品一区二区免费| 草莓污污视频在线观看| 欧美高清性xxxxhd| 久久亚洲精品一区二区| 色悠悠久久综合| 国产98色在线|日韩| 精品国产一区二区三区| 成人高潮aa毛片免费| xxx亚洲日本| 午夜精品一区二区三区在线观看 | 欧美黑人极品猛少妇色xxxxx| 黄色成人av在线| 国产一区二区毛片| 久久国产综合| 成人四虎影院| 黄色av网站在线看| 久久久久久久久久久久久国产精品 | 97伦理在线四区| 一区二区福利视频| 欧美性猛交xxxx偷拍洗澡| 成人av一区二区三区| 亚洲综合婷婷| 精品麻豆剧传媒av国产九九九| 成人影视在线播放| 91色国产在线| 日本成人三级电影网站| 欧美专区在线观看| 国产一区二区av| 在线观看日韩国产| 欧美极品美女视频| 久久99久久久久| 亚洲自拍偷拍网| 国产精品男女| 一区二区乱码| 精品99又大又爽又硬少妇毛片 | 91国产丝袜在线播放| 99精品国产视频| 久久九九99| 成人毛片免费看| 国产精品视频一区二区三区综合| 黄色在线视频网站| 中文字幕高清在线观看| 精品久久久噜噜噜噜久久图片| 日本一区不卡| 成人精品视频99在线观看免费| 欧美成人一二三| 精品呦交小u女在线| 欧美日韩精品电影| 亚洲午夜视频在线| 国产午夜精品一区二区三区视频 | 自拍偷拍21p| 日本成人在线不卡| 农村寡妇一区二区三区| 国产精品久久久久久久久男| 久久亚洲精品一区| 亚洲视频国产视频| 欧美videos大乳护士334| 日韩欧美成人网| 亚洲激情综合网| 国产亚洲欧美色| 成人永久看片免费视频天堂| 久久精品一区二区国产| 一区免费视频| 亚洲国产一区二区在线观看| 久9久9色综合| 精品国产一区二区三区成人影院| 黄色成人在线视频| 国产精品—色呦呦| 高h视频在线观看| 成人免费一区二区三区视频网站| 高清免费观看在线| 男女午夜视频在线观看| 亚洲综合欧美在线| 十八禁视频网站在线观看| 国产69精品久久久久久久| 国产日产欧美一区二区| 在线免费一区| 亚洲精品国产一区| 亚洲成人精品电影在线观看| 欧美性xxxx69| 日韩精品久久久| 欧美日韩亚洲免费| 日本一区二区三区视频在线播放| 久久99精品久久久久久久青青日本 | 久热精品在线视频| 色阁综合伊人av| 一本一道久久a久久精品逆3p | 91精品在线麻豆| 欧美性xxxxxx少妇| 91官网在线免费观看| 在线免费精品视频| 欧洲人成人精品| 欧美理论电影在线| 欧美一级生活片| 欧美变态tickling挠脚心| 欧美一级高清大全免费观看| 91精品国产aⅴ一区二区| 日韩免费看网站| 精品亚洲永久免费精品| 一本一道久久a久久精品逆3p| 中文字幕久精品免费视频| 中日韩美女免费视频网站在线观看 | 精品sm捆绑视频| 国产视频在线一区二区| 亚洲丝袜av一区| 久热精品视频在线观看一区| 国产做受69高潮| 国产精品看片资源| 91久久精品一区二区别| 精品婷婷色一区二区三区蜜桃| 欧美国产一区二区在线| 色中文字幕在线观看| 欧美精品一区二区三区三州| 国产天堂在线播放| 国产乱真实合集| 深夜福利免费在线观看| 黄在线免费观看| 欧美亚洲韩国| 一区二区日韩| 久久不见久久见中文字幕免费| 91综合久久一区二区| 中文精品视频| 国产一区欧美一区| 日本一区二区免费在线观看视频| 亚洲第一久久影院| 91精品国产高清一区二区三区蜜臀| 亚洲美女自拍视频| 久久久久久国产| 国产精品久久久91| 久久99九九| 免费人成在线观看视频播放| 波多野结衣在线中文| 1024国产在线| www.精品国产| 成人精品久久|