成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > HTML5新特性 多線程(Worker SharedWorker)

HTML5新特性 多線程(Worker SharedWorker)

熱門標(biāo)簽:聯(lián)通400電話申請(qǐng) 杭州營(yíng)銷電銷機(jī)器人供應(yīng)商 高德地圖標(biāo)注賓館位置 西寧智能外呼系統(tǒng)加盟 百應(yīng)電銷機(jī)器人產(chǎn)業(yè) 飛亞外呼系統(tǒng) 貸款電銷人工和機(jī)器人哪個(gè)好 電視購(gòu)物電銷外呼系統(tǒng) 電話機(jī)器人如何

There is no doubt that JavaScript是沒(méi)有多線程之說(shuō)的,他只能一件事一件事的做,做完一件事再做下一件事,假如你的js要花一段比較長(zhǎng)的時(shí)間做一件事的話,那么瀏覽器將會(huì)卡頓一段時(shí)間,不對(duì)用戶的操作產(chǎn)生響應(yīng),這可咋辦呢?謝天謝地,HTML5為我們提供了實(shí)現(xiàn)多線程的機(jī)制,這么好的東西,想必你早就再用了,不過(guò)沒(méi)關(guān)系啊,咱們一塊兒復(fù)習(xí)一下咯!

一、Worker類

  1、方法介紹

 ?。?)構(gòu)造函數(shù) new Worker(arg)  :參數(shù)表示你的線程要執(zhí)行的代碼所在的js文件,例如‘myworker.js’,構(gòu)造函數(shù)當(dāng)然是返回一個(gè)Worker類的實(shí)例

 ?。?)worker.postMessage(message):這個(gè)方法表示從主線程向子線程發(fā)送消息或者子線程向主線程發(fā)送消息,message一般是一個(gè)字符串,也可以將一個(gè)js對(duì)象轉(zhuǎn)成字符串發(fā)過(guò)去

 ?。?)worker上還有一個(gè)message事件,當(dāng)有人向這個(gè)worker實(shí)例發(fā)送消息時(shí),該事件被觸發(fā),我們可以從他的事件對(duì)象的data屬性中獲得post過(guò)來(lái)的值

  可以看到Woker類的API是相當(dāng)簡(jiǎn)潔的,只有兩個(gè)最常用的方法,一個(gè)事件,下面我們來(lái)通過(guò)實(shí)際的例子看看。

//main.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>main</title>
</head>
<body>
    <div id="out"></div>
    <input type="text" name="" id="txt">
    <button id="btn">發(fā)送</button>
    <script type="text/javascript">
        var out = document.getElementById("out");
        var btn = document.getElementById("btn");
        var txt = document.getElementById("txt");
        var worker = new Worker("thread1.js");
        btn.addEventListener("click",function(){
            var postData = txt.value;
            worker.postMessage(postData);
        },false);
        worker.addEventListener('message',function(e){
            out.innerText = e.data;
        },false);
    </script>
</body>
</html>
//thread1.js
onmessage = function(event){
    var res = event.data+"帥氣!";
    postMessage(res);
}

  當(dāng)我在文本框輸入“大~熊”點(diǎn)擊發(fā)送按鈕就會(huì)出現(xiàn)如下效果

  簡(jiǎn)單分析分析,我在主線程由thead1.js創(chuàng)建了一個(gè)Worker的實(shí)例worker,當(dāng)點(diǎn)擊按鈕時(shí)會(huì)調(diào)用他的postMessage方法,將文本框中的內(nèi)容發(fā)送到thread1.js,我們的thread1.js怎么做的呢?是這樣,他偵聽(tīng)message事件,主線程發(fā)送消息過(guò)來(lái)就觸發(fā)這個(gè)事件,執(zhí)行回調(diào)函數(shù),回調(diào)函數(shù)從事件對(duì)象取得發(fā)送來(lái)的值,然后將這個(gè)值加上“帥氣!”,然后在發(fā)送回去。主線程呢也偵聽(tīng)了worker的message事件,所以有消息過(guò)去時(shí)會(huì)觸發(fā),將消息內(nèi)容顯示在div中,如此就看到了上面的效果。

  或許你會(huì)將這有什么用呢?這里確實(shí)沒(méi)什么用,這里我們大可以在主線程還總完成加“帥氣!”的操作,因?yàn)樗膹?fù)雜度為O(1)(哈哈,最近在學(xué)算法!),但是假如不是做這么簡(jiǎn)單的操作呢?這種方法的好處就是不過(guò)你的子線程做多么復(fù)雜的工作,都不會(huì)讓主線程停下來(lái),主線程改干嘛還干嘛,等到子線程把數(shù)據(jù)處理好了他直接拿過(guò)來(lái)就好了。

  陸老師將可以在子線程中在調(diào)用new Worker()創(chuàng)建新的子線程,我發(fā)現(xiàn)這樣是不可以的,會(huì)報(bào)undefined錯(cuò)誤,也就是說(shuō)子線程中是不能調(diào)用Worker構(gòu)造函數(shù)的,一開(kāi)始以為是自己錯(cuò)了,后來(lái)查閱了官方文檔,發(fā)現(xiàn)也沒(méi)有相關(guān)的描述。

  下面看一個(gè)在主線程調(diào)用多個(gè)子線程的例子:

//main.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>main</title>
</head>
<body>
    <div id="out"></div>
    <input type="text" name="" id="txt">
    <button id="btn">發(fā)送</button>
    <script type="text/javascript">
        var out = document.getElementById("out");
        var btn = document.getElementById("btn");
        var txt = document.getElementById("txt");
        var worker1 = new Worker("thread1.js");
        var worker2 = new Worker("thread2.js");
        btn.addEventListener("click",function(){
            var postData = txt.value;
            worker1.postMessage(postData);
        },false);
        worker1.addEventListener('message',function(e){
            worker2.postMessage(e.data);
        },false);
        worker2.addEventListener('message',function(e){
            out.innerText = e.data;
        },false);
    </script>
</body>
</html>
//thread1.js
onmessage = function(event){
    var res = event.data+"帥氣!";
        postMessage(res);    
}
//thread2.js
onmessage = function(event){
    var res = event.data+"沒(méi)騙你喲!";
    postMessage(res);
    close();
}

  主線程要完成一個(gè)任務(wù)需要兩個(gè)線程,它創(chuàng)建了兩個(gè)線程worker1,2,先向worker1請(qǐng)求,得到返回的數(shù)據(jù)后,再請(qǐng)求worker2,同時(shí)將worker1處理之后的數(shù)據(jù)交給worder2處理,然后拿到最終結(jié)果,顯示在頁(yè)面上。

  在子線程中可以引入其他的js文件然后調(diào)用,比如下邊這個(gè)例子。

//main.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>main</title>
</head>
<body>
    <div id="out"></div>
    <input type="text" name="" id="txt">
    <button id="btn">發(fā)送</button>
    <script type="text/javascript">

        var out = document.getElementById("out");
        var btn = document.getElementById("btn");
        var txt = document.getElementById("txt");
        var worker1 = new Worker("thread1.js");
        btn.addEventListener("click",function(){
            var postData = txt.value;
            worker1.postMessage(postData);
        },false);
        worker1.addEventListener('message',function(e){
            out.innerText = e.data;
            
        },false);
    </script>
</body>
</html>
//thread1.js
importScripts('tools.js')
onmessage = function(event){
    var res = handler(event.data);
        postMessage(res);    
}
//tools.js
function handler(data){
    return data+"加油加油!"
}

  可以看到我們的thread1.js并沒(méi)有一個(gè)叫做tools.js的文件,但是它通過(guò)importScripts()導(dǎo)入了一個(gè)js文件,然后就可以調(diào)用里邊暴露出來(lái)的方法了。

二、SharedWorker類

  SharedWorker的實(shí)質(zhì)在于share,不同的線程可以共享一個(gè)線程,他們的數(shù)據(jù)也是共享的。

  直接用例子來(lái)探討。

  使用方法一:

//main.html
<!DOCTYPE HTML>
<head>
    <title>Shared workers: demo 1</title>
</head>
<body>
    <div id="log"></div>
<script>
  var worker = new SharedWorker('shared.js');
  var log = document.getElementById('log');
  worker.port.onmessage = function(e) { // note: not worker.onmessage!
    log.textContent += '\n' + e.data;
  }
</script>
</body>
</html>
//shared.js
onconnect = function(e) {
  var port = e.ports[0];
  port.postMessage('Hello World!');
}

  這是從w3c拿得一個(gè)例子,下面先看第二種方法,再做分析

<!DOCTYPE HTML>
<html>
<head>
    <title>Shared workers: demo 2</title>
</head>
<body>
<div id="log"></div>
<script>
  var worker = new SharedWorker('shared.js');
  var log = document.getElementById('log');
  worker.port.addEventListener('message', function(e) {
    log.textContent += '\n' + e.data;
  }, false);
  worker.port.start(); // note: need this when using addEventListener
  worker.port.postMessage('ping');
</script>
</body>
</html>  
//shared
onconnect = function(e) {
  var port = e.ports[0];
  port.postMessage('Hello World!');
  port.onmessage = function(e) {
    port.postMessage('pong'); // not e.ports[0].postMessage!
    // e.target.postMessage('pong'); would work also
  }
}

  第一種方法中是使用事件句柄的方式將聽(tīng)message事件,不需要調(diào)用worker.port.start(),第二種方法是通過(guò)addEventListener()方法監(jiān)聽(tīng)message事件,需要worker.port.start()方法激活端口。他們不同于worker,當(dāng)有人和他通信時(shí)觸發(fā)connect事件,然后他的message事件是綁定在messagePort對(duì)象上的,不想worker那樣,你可以回頭看看worker是怎么做的。

  那么sharedWorker是怎么共享數(shù)據(jù)的呢?請(qǐng)看下面的例子。

//main1 和main2都是這樣
<!DOCTYPE HTML>
<html>
<head>
    <title>Shared workers: demo 2</title>
</head>
<body>
<div id="log"></div>
<input type="text" name="" id="txt">
<button id="get">get</button>
<button id="set">set</button>
<script>
  var worker = new SharedWorker('shared.js');
  var get = document.getElementById('get');
  var set = document.getElementById('set');
  var txt = document.getElementById('txt');
  var log = document.getElementById('log');
  worker.port.addEventListener('message', function(e) {
    log.innerText = e.data;
  }, false);
  worker.port.start(); // note: need this when using addEventListener
  set.addEventListener('click',function(e){
      worker.port.postMessage(txt.value);
  },false);
  get.addEventListener('click',function(e){
      worker.port.postMessage('get');
  },false);
</script>
</body>
</html>
//shared
var data;
onconnect = function(e) {
  var port = e.ports[0];
  port.onmessage = function(e) {
    if(e.data=='get'){
        port.postMessage(data);
    }else{
        data=e.data;
    }
  }
}

  這里分析一波,我們?cè)趍ain1.html的文本框輸入數(shù)據(jù),點(diǎn)擊set,然后在main2.html中點(diǎn)擊get法現(xiàn)能夠獲取到我們?cè)趍ain1.html中設(shè)置的數(shù)據(jù),這說(shuō)明我們的sharedWorker事實(shí)上是單例的,就像java中的static類一樣,不管new多少個(gè),實(shí)際上只有一個(gè),這樣我們的不同線程就可以共享到sharedWorker中的數(shù)據(jù)了。這里把圖給上,記得有篇文章沒(méi)給圖,然后有人給我建議了,問(wèn)能不能給圖。

  最后來(lái)小結(jié)一下,worker和sharedWorker沒(méi)有什么懸糊的,就是把臺(tái)前的工作搬到幕后去做,不打斷臺(tái)前的工作。正所謂臺(tái)上十分鐘,臺(tái)下十年功,如果你把臺(tái)下的十年供放到臺(tái)上做,觀眾的唾沫星子早就把你淹死了,所以說(shuō)那些費(fèi)事費(fèi)力的工作還是放到臺(tái)下去,臺(tái)上只用展示你最好的一面的好了,十分鐘足以!

標(biāo)簽:邯鄲 煙臺(tái) 撫州 牡丹江 晉中 內(nèi)蒙古 安慶 玉溪

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《HTML5新特性 多線程(Worker SharedWorker)》,本文關(guān)鍵詞  HTML5,新特性,新,特性,多,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《HTML5新特性 多線程(Worker SharedWorker)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于HTML5新特性 多線程(Worker SharedWorker)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    香蕉成人伊视频在线观看| а√天堂8资源中文在线| 亚洲理论在线观看| 亚洲第一影院| 久久久久久国产精品美女| 国产精品视频在线观看| 国产亚洲无码精品| 麻豆自创视频在线观看| 国产伦精品一区二区三区高清版禁| 在线免费观看的av| 日韩av网站在线免费观看| 日韩日韩日韩日韩日韩| 国产亚洲美州欧州综合国| 黑人精品一区二区| 欧美精品18videosex性欧美| 亚洲国产精品欧美久久| а√天堂8资源中文在线| 91麻豆一二三四在线| 亚洲欧美日韩另类| 在线播放国产精品二区一二区四区| 在线观看日韩一区| а√中文在线天堂精品| 亚洲免费视频在线| 日韩欧美理论片| 99re在线视频这里只有精品| 91麻豆精品秘密| 中文字幕在线不卡一区二区三区| 少妇人妻一区二区| 伊人网在线综合| 国产精品任我爽爆在线播放| 你懂的国产精品永久在线| 一区二区三区四区日韩| 深夜视频在线观看| 18禁裸男晨勃露j毛免费观看| 日韩欧美在线不卡| 日韩欧美自拍偷拍| 午夜dj在线观看高清视频完整版| 亚洲日本中文| 久久久亚洲成人| 国产精品视频免费播放| 亚洲 欧美 日韩在线| 伊人成年综合电影网| 国产一区二区成人久久免费影院| 欧美精品日韩一本| 97超碰在线免费观看| 久久综合电影| 午夜精品爽啪视频| 日日干天天干| 亚洲妇女无套内射精| 久久久国产高清| 亚洲高清免费在线观看| 中文字幕在线中文| 国产欧美一区二区精品仙草咪| 草莓视频app18在线视频| 激情偷乱视频一区二区三区| 久久97精品久久久久久久不卡| 天堂网中文在线观看| 亚洲精品影视| 678五月天丁香亚洲综合网| 国产精品白丝jk黑袜喷水| 国产精品久久综合av爱欲tv| 欧美一区精品| 国产亚洲精品久久久久久| 国产精品人人爽人人爽| 精品一区二区影视| 日韩黄色成人| 亚洲av激情无码专区在线播放| 欧美极品另类videosde| 久草视频在线资源站| 91精品国产自产91精品| 精品日本一区二区三区在线观看| 日本一区二区免费高清视频| 久久久久久久亚洲| 亚洲国产精品小视频| 91黄色在线观看| 国产视频一区二区三区四区五区| 亚洲国产精品91| 欧美国产极速在线| 人人妻人人澡人人爽欧美一区| 污香蕉视频在线观看| 国产一区二区0| 波多野结衣三级视频| 成人在线视频网| 99精品欧美| gogo久久| 波多野结衣在线一区二区| 成人羞羞网站入口免费| 国产精品视频专区| 国产麻豆视频在线观看| 久久综合给合| 久久午夜国产精品| 日本一本草久在线中文| 成人毛片免费看| 国产在线视频在线观看| 午夜成人鲁丝片午夜精品| 人妻 丝袜美腿 中文字幕| 九七影院理论片| 99久re热视频精品98| 中文精品无码中文字幕无码专区| 女人裸体免费网站| av黄色在线观看| 久久精品夜色噜噜亚洲a∨| 在线观看免费播放网址成人| 久久久久久久国产精品视频| 色资源网站在线观看| 一区二区三区毛片| 日本免费黄色网| 91动漫免费网站| 一区二区三区日韩精品视频| 97se视频在线观看| 免费视频91| ed2k情侣啪啪91av| 亚洲av无码乱码国产精品久久| 欧美午夜视频在线观看| 久久久久xxxx| 欧美在线视频观看免费网站| 国产青青草在线| 欧美jjzz| 久久久久久久久久一区| 内衣办公室在线| 国产999精品久久久影片官网| 91精品国产经典在线观看| 精品国产123| 国产chinesehd精品露脸| 综合久久久久综合| 尤物九九久久国产精品的分类| 国产精品乱码久久久久| 成人午夜视频免费看| 精品久久久久久亚洲精品| 日韩精品一区二区三区四区五区| 成人a免费在线看| 亚洲高清久久| 中文字幕一区二区人妻电影丶| 痴汉一区二区三区| 国产91精品高潮白浆喷水| 欧美日韩高清丝袜| 肉肉视频在线观看| 国产偷国产偷亚洲高清人白洁| 91麻豆swag| 夜夜爽www精品| 欧美日韩成人| 99精品热6080yy久久| 日韩国产欧美精品一区二区三区| 欧美成人亚洲高清在线观看| 欧美一区二区在线免费播放| 在线中文字幕第一页| 久久久久久久99| 日韩亚洲国产中文字幕| 成年人视频网站免费观看| 岛国在线视频网站| 狠狠躁天天躁日日躁欧美| 国内精品免费在线观看| 香蕉视频在线观看www| 免费a视频在线观看| 国产精品宾馆| 日本成人午夜影院| 小说区图片区综合久久88| 国产午夜精品久久久久久免费视| 91视频久久| 国产精品国产三级在线观看| 婷婷久久五月天| 亚洲精品日产aⅴ| 97久久夜色精品国产| 国产综合欧美在线看| 五月天激情小说综合| 精品国产乱码久久久久久图片| 韩国视频一区二区三区| 欧美三级电影在线播放| а√在线中文网新版地址在线| 欧美日韩aaaaaa| 91色视频在线观看| 欧一区二区三区| 久久久久久国产精品| 亚欧激情乱码久久久久久久久| 国产999免费视频| 欧美性感美女h网站在线观看免费| 国产精品久久国产精麻豆99网站| 一区二区三区在线播| 夜夜爽夜夜爽精品视频| 久久青青草综合| 日本国产在线视频| 色猫猫成人app| 国产精品久久久久久av公交车| 性欧美疯狂猛交69hd| 午夜精品久久久久久99热软件| 亚洲成在人线免费视频| 国产精品久久久久久久久久久久| 亚洲一区二区精品视频| 亚洲第一精品夜夜躁人人躁| gogogo免费高清日本写真| 国产精品1区二区.| 高清视频一区二区三区四区| 国产69精品久久app免费版| 国产欧美精品一区| 婷婷综合亚洲| 久久av影院| 欧美婷婷精品激情| 亚洲色图100p| 少妇激情一区二区三区| 亚洲色图欧美日韩| 亚洲韩国日本中文字幕| 99热在线免费| 日韩一级在线视频| 年轻的保姆91精品| 香蕉视频网站入口| 艳色歌舞团一区二区三区| 久久www视频| 青娱乐精品在线| 俄罗斯女人裸体性做爰| h1515四虎成人| 欧美激情一区三区| 男人天堂网站在线| 五月婷婷开心中文字幕| 久久一区欧美| av在线综合网| 免费网站看电影大片| 国产精品无码av在线播放| 亚洲一区二区五区| 国产精品亚洲综合在线观看| 亚洲精选一区二区| 国产特黄级aaaaa片免| 又紧又大又爽精品一区二区| www.亚洲免费视频| 国产精品久久在线观看| 国产影视一区二区| 日韩精品一区二区三区在线| 久久高清免费观看| 青青草免费观看免费视频在线| 亚洲国产123| 在线播放性xxx欧美| 欧美大电影免费观看| av亚洲男人天堂| 国产精品美女在线观看直播| 国产白丝精品91爽爽久久| 成人一区二区不卡免费| av在线下载| 国产一级一级国产| 一级特黄特色的免费大片| 精品久久香蕉国产线看观看亚洲| 五月天婷婷在线视频| 国产99久久久欧美黑人| 三级网站在线播放| 精品无人区卡一卡二卡三乱码免费卡| 亚洲毛茸茸少妇高潮呻吟| 久久视频精品| 日本视频中文字幕一区二区三区| 欧美特黄aaa| 天堂中文资源在线观看| 久草国产在线观看| 少妇无码一区二区三区| 日韩中文理论片| 99在线免费视频| 久久久久午夜电影| 欧美日韩不卡合集视频| www.jizz在线观看| 久久精品欧美视频| 正在播放国产对白害羞| 春暖花开亚洲一区二区三区| 9久久9毛片又大又硬又粗| 国产成人在线播放视频| 青青草观看免费视频在线| 视频一区视频二区国产精品| 婷婷亚洲久悠悠色悠在线播放| 欧美va久久久噜噜噜久久| 无国产精品白浆免费视| 最近2019中文字幕大全第二页| 日韩一级视频免费观看在线| 亚洲成色www久久网站| 凹凸精品一区二区三区| 一区二区传媒有限公司| 欧美性20hd另类| 国产精品一区在线免费观看| 首页亚洲欧美制服丝腿| 久久99精品国产一区二区三区| 国产xxxx做受性欧美88| 免费高清在线视频一区·| 亚洲网站啪啪| 亚洲视频日本| 一本色道久久综合| 小说区图片区图片区另类灬| 污污视频在线免费看| 四虎永久免费地址| 日本护士...精品国| 中文字幕一区二区在线观看| 一本久道高清无码视频| 国产精品久久久久久久久久| 中文字幕免费在线观看视频一区| 日av在线不卡| 亚洲激情播播| 日本一区二区三区在线免费观看| 国产精品久久久久久久午夜片| 日本视频在线| 成人天堂yy6080亚洲高清| 97超碰人人模人人人爽人人爱| 日韩精品极品视频免费观看| 成人免费视频网址| 欧美影院三区| 一本色道久久综合精品婷婷| 国产成人手机在线| 国产成人在线视频播放| 8x8x成人免费视频| 青青草免费观看视频| 亚洲人性生活视频| 第四色日韩影片| 国产对白在线播放| 怡红院精品视频| av男人的天堂在线观看| 男人的天堂一区| 色噜噜噜噜噜噜| 亚州视频一区二区三区| 宇都宫紫苑在线播放| 午夜影院免费播放| 成人精品天堂一区二区三区| 国产精品亚洲第一区| 国产aaa精品| 麻豆国产精品| 亚洲乱码国产乱码精品精98午夜| 四虎国产精品成人永久免费影视| 99reav在线| 羞羞视频在线观看一区二区| 奇米四色7777| 在线免费观看一区二区| 黄在线观看在线播放720p| 亚洲国产福利在线| 水莓100国产免费av在线播放| 欧美伊人精品成人久久综合97| www四虎com| 美女福利视频在线观看|