婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 淺談HTML5 Web Worker的使用

淺談HTML5 Web Worker的使用

熱門標簽:成都智能外呼系統平臺 南寧點撥外呼系統哪家公司做的好 四川點撥外呼系統 當涂高德地圖標注 電銷機器人電話用什么卡 鎮江智能外呼系統有效果嗎 江蘇智能電銷機器人哪家好 黃島區地圖標注 云南大理400電話申請官方

Web Worker是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

<!DOCTYPE HTML>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 <script type="text/javascript">
//WEB頁主線程
var worker =new Worker("worker.js"); //創建一個Worker對象并向它傳遞將在新線程中執行的腳本的URL
 worker.postMessage("hello world");     //向worker發送數據
 worker.onmessage =function(evt){     //接收worker傳過來的數據函數
   console.log(evt.data);              //輸出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.data, 10);
    postMessage(fibonacci(n));
};

HTML頁面:fibonacci.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">
  onload =function(){
      var worker =new Worker('fibonacci.js');  
      worker.addEventListener('message', function(event) {
        var timer2 = (new Date()).valueOf();
           console.log( '結果:'+event.data, '時間:'+ timer2, '用時:'+ ( timer2  - timer ) );
      }, false);
      var timer = (new Date()).valueOf();
      console.log('開始計算:40','時間:'+ timer );
      setTimeout(function(){
          console.log('定時器函數在計算數列時執行了', '時間:'+ (new Date()).valueOf() );
      },1000);
      worker.postMessage(40);
      console.log('我在計算數列的時候執行了', '時間:'+ (new Date()).valueOf() );
  }  
  </script>
</head>
<body>
</body>
</html>

在Chrome中打開fibonacci.html,控制臺得到如下輸出:

開始計算:40 時間:1316508212705
我在計算數列的時候執行了 時間:1316508212734
定時器函數在計算數列時執行了 時間:1316508213735
結果:102334155 時間:1316508262820 用時:50115

這個例子說明在worker中執行的fibonacci數列的計算并不會影響到主線程的代碼執行,完全在自己獨立的線程中計算,只是在計算完成之后將結果發回主線程。

利用web worker我們可以在前端執行一些復雜的大量運算而不會影響頁面的展示,并且不會彈出惡心的腳本正忙提示。

下面這個例子使用了web worker來計算場景中的像素,場景打開時是一片一片進行繪制的,一個worker只計算一塊像素值。

三:Worker的其他嘗試

我們已經知道Worker通過接收一個URL來創建一個worker,那么我們是否可以利用web worker來做一些類似jsonp的請求呢,大家知道jsonp是通過插入script標簽來加載json數據的,而script元素在加載和執行過程中都是阻塞式的,如果能利用web worker實現異步加載將會非常不錯。

下面這個例子將通過 web worker、jsonp、ajax三種不同的方式來加載一個169.42KB大小的JSON數據

// /aj/webWorker/core.js
function $E(id) {
    return document.getElementById(id);
}
onload =function() {
    //通過web worker加載
    $E('workerLoad').onclick =function() {
        var url ='http://js.wcdn.cn/aj/mblog/face2';
        var d = (new Date()).valueOf();
        var worker =new Worker(url);
        worker.onmessage =function(obj) {
            console.log('web worker: '+ ((new Date()).valueOf() - d));
        };
    };
    //通過jsonp加載
    $E('jsonpLoad').onclick =function() {
        var url ='http://js.wcdn.cn/aj/mblog/face1';
        var d = (new Date()).valueOf();
        STK.core.io.scriptLoader({
            method:'post',
            url : url,
            onComplete : function() {
                console.log('jsonp: '+ ((new Date()).valueOf() - d));
            }
        });
    };
    //通過ajax加載
    $E('ajaxLoad').onclick =function() {
        var url ='http://js.wcdn.cn/aj/mblog/face';
        var d = (new Date()).valueOf();
        STK.core.io.ajax({
            url : url,
            onComplete : function(json) {
                console.log('ajax: '+ ((new Date()).valueOf() - d));
            }
        });
    };
};

HTML頁面:/aj/webWorker/worker.html

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Worker example: load data</title>
<script src="http://js.t.sinajs.cn/STK/js/gaea.1.14.js" type="text/javascript"></script>
<script type="text/javascript" src="http://js.wcdn.cn/aj/webWorker/core.js"></script>
</head>
<body>
    <input type="button" id="workerLoad" value="web worker加載"></input>
    <input type="button" id="jsonpLoad" value="jsonp加載"></input>
    <input type="button" id="ajaxLoad" value="ajax加載"></input>
</body>
</html>

設置HOST

127.0.0.1 js.wcdn.cn

通過 http://js.wcdn.cn/aj/webWorker/worker.html 訪問頁面然后分別通過三種方式加載數據,得到控制臺輸出:

web worker: 174
jsonp: 25
ajax: 38

多試幾次發現通過jsonp和ajax加載數據的時間相差不大,而web worker的加載時間一直處于高位,所以用web worker來加載數據還是比較慢的,即便是大數據量情況下也沒任何優勢,可能是Worker初始化新起線程比較耗時間。除了在加載過程中是無阻塞的之外沒有任何優勢。

那么web worker是否能支持跨域js加載呢,這次我們通過http://127.0.0.1/aj/webWorker/worker.html 來訪問頁面,當點擊 "web worker加載" 加載按鈕時Chrome下無任何反映,FF6下提示錯誤。由此我們可以知道web worker是不支持跨域加載JS的,這對于將靜態文件部署到單獨的靜態服務器的網站來說是個壞消息。

所以web worker只能用來加載同域下的json數據,而這方面ajax已經可以做到了,而且效率更高更通用。還是讓Worker做它自己擅長的事吧。

四:總結

web worker看起來很美好,但處處是魔鬼。

我們可以做什么:

1.可以加載一個JS進行大量的復雜計算而不掛起主進程,并通過postMessage,onmessage進行通信

2.可以在worker中通過importScripts(url)加載另外的腳本文件

3.可以使用 setTimeout(), clearTimeout(), setInterval(), and clearInterval()

4.可以使用XMLHttpRequest來發送請求

5.可以訪問navigator的部分屬性

有那些局限性:

1.不能跨域加載JS

2.worker內代碼不能訪問DOM

3.各個瀏覽器對Worker的實現不大一致,例如FF里允許worker中創建新的worker,而Chrome中就不行

4.不是每個瀏覽器都支持這個新特性

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:十堰 南京 咸寧 酒泉 淮安 西寧 廣西 佳木斯

巨人網絡通訊聲明:本文標題《淺談HTML5 Web Worker的使用》,本文關鍵詞  淺談,HTML5,Web,Worker,的,使用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《淺談HTML5 Web Worker的使用》相關的同類信息!
  • 本頁收集關于淺談HTML5 Web Worker的使用的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    风流少妇一区二区| 精品国产一区久久| 成人av片在线观看| 国产在线精品一区二区不卡了| 久久99国内精品| 精品亚洲免费视频| 国产中文字幕一区| 成人午夜视频在线| 99久久伊人精品| 91高清在线观看| 欧美日韩精品一二三区| 在线播放/欧美激情| 欧美电影免费观看高清完整版在线| 精品日韩一区二区三区| 久久九九久精品国产免费直播| 中文字幕巨乱亚洲| 一区二区三区在线观看视频| 亚洲18女电影在线观看| 乱中年女人伦av一区二区| 国产成人在线免费| 欧美性色综合网| 亚洲精品一区二区三区99| 国产精品―色哟哟| 亚洲国产sm捆绑调教视频| 美女一区二区三区在线观看| 国产成人亚洲综合a∨猫咪| 色94色欧美sute亚洲线路二| 91精品久久久久久久久99蜜臂| 久久久电影一区二区三区| 夜夜精品视频一区二区| 国产原创一区二区三区| 91在线精品秘密一区二区| 91精品国产综合久久久蜜臀图片| 久久五月婷婷丁香社区| 亚洲一区二区欧美日韩| 国产成人av一区二区三区在线| 色综合中文字幕| 久久久久国产精品免费免费搜索| 亚洲综合一二区| 国产成人精品一区二区三区网站观看| 日本精品裸体写真集在线观看 | 欧美国产日本韩| 亚洲国产精品久久久久秋霞影院| 国产高清精品网站| 欧美精品视频www在线观看| 国产精品久久久久久久久果冻传媒| 五月天激情综合| 97久久精品人人爽人人爽蜜臀| 欧美一区二区免费视频| 一区二区三区精品| 91在线观看下载| 久久精品亚洲麻豆av一区二区 | 成人aa视频在线观看| 日韩一区二区在线观看视频| 亚洲欧洲日韩综合一区二区| 国产美女精品人人做人人爽 | 中文字幕av一区 二区| 美国精品在线观看| 制服丝袜国产精品| 亚洲国产日产av| 在线观看日产精品| 日韩一区在线播放| 成人福利电影精品一区二区在线观看| 26uuu亚洲综合色| 美女视频第一区二区三区免费观看网站| 在线免费观看视频一区| 亚洲色图欧美偷拍| 91美女在线视频| 亚洲图片另类小说| 色哟哟在线观看一区二区三区| 国产精品免费看片| 91麻豆自制传媒国产之光| 亚洲欧美影音先锋| 91麻豆6部合集magnet| 亚洲欧美另类图片小说| 91黄色免费看| 偷拍自拍另类欧美| 日韩免费看网站| 国产成人综合网| 国产精品久久福利| 91麻豆文化传媒在线观看| 亚洲成人精品影院| 4438x亚洲最大成人网| 美女国产一区二区| 日本一区二区三区电影| 91丨九色丨蝌蚪丨老版| 亚洲自拍偷拍欧美| 日韩欧美国产三级| 国产999精品久久| 伊人性伊人情综合网| 91精品欧美一区二区三区综合在 | 国产一区二区三区四| 国产日韩欧美综合一区| 一本到不卡精品视频在线观看| 亚洲国产精品久久不卡毛片| 日韩精品自拍偷拍| 国产河南妇女毛片精品久久久| 亚洲欧洲99久久| 91麻豆精品国产自产在线| 国产福利91精品| 亚洲国产综合在线| 久久精品人人做人人综合| 在线免费观看视频一区| 国产在线精品一区二区夜色| 最近中文字幕一区二区三区| 欧美精品精品一区| 成人爽a毛片一区二区免费| 亚洲成av人片在线| 日本一区二区三区免费乱视频| 欧美三级日韩在线| 成人午夜私人影院| 裸体健美xxxx欧美裸体表演| 中文字幕日韩一区| wwwwww.欧美系列| 色菇凉天天综合网| 国产成人精品免费看| 人人超碰91尤物精品国产| 中文字幕亚洲欧美在线不卡| 精品少妇一区二区三区在线播放| 一本大道综合伊人精品热热| 国产伦精品一区二区三区视频青涩| 亚洲综合在线免费观看| 国产欧美日韩精品a在线观看| 欧美放荡的少妇| 欧美性大战久久久久久久| 国产成人精品三级麻豆| 久久99精品一区二区三区三区| 亚洲高清不卡在线观看| 国产精品久久久久久久裸模| 欧美va亚洲va香蕉在线| 7777精品久久久大香线蕉| 色一情一乱一乱一91av| av一二三不卡影片| 国产69精品久久久久毛片| 国产揄拍国内精品对白| 九九久久精品视频| 另类小说一区二区三区| 蜜臀av亚洲一区中文字幕| 偷拍一区二区三区| 日韩中文欧美在线| 蜜臀精品久久久久久蜜臀 | 久久久亚洲精品一区二区三区| 91 com成人网| 3d动漫精品啪啪一区二区竹菊 | 亚洲天堂福利av| 一区免费观看视频| 综合分类小说区另类春色亚洲小说欧美 | 亚洲欧洲日本在线| 中文字幕一区在线观看视频| 国产日韩欧美高清| 欧美国产一区在线| 国产精品污网站| **性色生活片久久毛片| 亚洲激情自拍视频| 亚洲午夜久久久久久久久久久| 亚洲va韩国va欧美va| 日本在线不卡一区| 精品亚洲免费视频| 国产成人亚洲精品青草天美 | 亚洲r级在线视频| 免费在线看一区| 国产高清不卡一区二区| 不卡av免费在线观看| 色94色欧美sute亚洲线路一ni| 欧美日韩中文字幕一区| 日韩一卡二卡三卡四卡| 亚洲精品一区二区三区精华液| 国产色产综合色产在线视频| 国产精品久久久久久久浪潮网站| 亚洲激情综合网| 美日韩一级片在线观看| 成人av综合在线| 欧美自拍丝袜亚洲| 26uuu国产日韩综合| 亚洲人成网站精品片在线观看| 亚洲综合丁香婷婷六月香| 国产综合成人久久大片91| 91免费版pro下载短视频| 91精品国产综合久久福利软件| 国产清纯在线一区二区www| 亚洲高清在线精品| 国产iv一区二区三区| 4438成人网| 国产精品二三区| 寂寞少妇一区二区三区| 色综合久久久久综合体| 精品国产乱码久久久久久牛牛| 亚洲人成精品久久久久久| 久久精品国产精品青草| 色婷婷综合久久久中文字幕| 久久综合资源网| 五月天亚洲婷婷| 99久久精品国产精品久久| 久久久久久亚洲综合影院红桃| 午夜成人免费电影| 91老师国产黑色丝袜在线| 欧美极品aⅴ影院| 免费观看30秒视频久久| 欧美亚洲尤物久久| 国产精品白丝在线|