亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

再談JavaScript線程

2019-11-20 12:04:08
字體:
來源:轉載
供稿:網友

代碼判斷一:

<div id="div">  click me</div><script>  var div=document.getElementById("div");  div.addEventListener('click',function(){   alert('You have clicked me!');  });  for(var i =0; i<999999999;i++){   console.log(i);  }</script>

執行之,不出意外的話所有瀏覽器都會卡死,因為上面的for循環次數太多了,非常耗費CPU資源,而基于JavaScript單線程的事實,瀏覽器UI渲染被掛起而導致假死。

       現在問題來了,我就是想要實現上述代碼,怎么辦?

Concurrent.Thread.js
       該類庫實質上還是使用setTimeout來實現一個“假的多線程”。在HTML5 WebWorker問世之前是一個很好的選擇。比如我們要實現上述“代碼片段一”,可以這樣寫(點我下載類庫):

代碼片段二:

<div id="div">  click me</div><script src="Concurrent.Thread.js"></script><script>  Concurrent.Thread.create(function(){    var div=document.getElementById("div");    div.addEventListener('click',function(){     alert('You have clicked me!');    });    for(var i =0; i<9999999;i++){     console.log(i);    }  });</script>

 通過該類庫提供的create方法可以創建一個“新線程”。另外,給script標簽的type屬性設置為 text/x-script.multithreaded-js 也可以實現同樣的效果:

代碼片段三:

<div id="div">  click me</div><script src="Concurrent.Thread.js"></script><script type="text/x-script.multithreaded-js">    var div=document.getElementById("div");    div.addEventListener('click',function(){     alert('You have clicked me!');    });    for(var i =0; i<9999999;i++){     console.log(i);    }</script>

WebWorker
    針對以上瀏覽器卡死這種糟糕的用戶體驗,HTML5怎么會熟視無睹呢?

     下面我們用經典的斐波那契數列來做測試:

代碼片段四:

主頁面:

<div id="div"></div><script>  window.onload=function(){     var div=document.getElementById("div");     if(typeof(Worker)!=="undefined"){//在創建WebWorker之前,先判斷瀏覽器是否支持        console.log("Start calculating....");       var time1= new Date()*1;//獲得當前時間戳       var worker=new Worker("fibonacci.js");//創建WebWorker對象,并傳遞在新線程中將要執行的腳本的路徑       worker.onmessage=function(e){ //監聽從新線程發送過來的數據         div.innerHTML=e.data;         var time2=new Date()*1;         console.log("time spend:"+(time2-time1)+"ms");       }               worker.postMessage(36);//向新線程發送數據     }else{       alert("Your browser do not support WebWoker");     }  }</script>fibonacci.js:var fibonacci=function (n){  return n<3?n:(arguments.callee(n-1)+arguments.callee(n-2));}onmessage=function(e){  var num=parseInt(e.data,10);  postMessage(fibonacci(num));//向主頁面發送數據}

基本的使用方法已在代碼中做注釋了,查看控制臺,可以看見很快就打印出執行時間了。所以我們得出的結論是:WebWorker適合在前端執行復雜的大量的計算。需要注意的是,WebWorker不支持跨域,本地測試還是用http協議,不要用file協議,否則不能創建Worker對象而報腳本錯誤 。

        如果我們需要連續執行多個postMessage操作,最好不要work.postMessage一直寫,像這樣:

    worker.postMessage(36);    worker.postMessage(36);    worker.postMessage(36);

       因為此時只有一個WebWorker實例,postMessage會順序執行而不是異步執行,就不能充分發揮它的性能了??梢酝ㄟ^創建多個WebWorker實例來發送數據。

        需要注意的幾點事項有:

        1、我們觀察到WebWorker通過接受一個url來創建一個worker,而jsonp的實現原理就是通過動態插入script標簽加載數據,那我們嘗試用WebWorker來實現同樣的事情不是更好嗎?因為WebWorker是多線程的,沒有阻塞,豈不美哉?但實際上經過實驗,我們發現WebWorker表現并不如意。所以這并不是它擅長的事,我們還是不要讓它越俎代庖的好。

        2、WebWorker在接受其他來源信息的時候,其實也給站點的安全帶來了隱患,如果接收不明來源的腳本信息,可能會導致XSS注入攻擊。所以這點需要防范,其實我們上面例子中使用innerHTML是不安全的,可以使用innerText或現代瀏覽器提供的textContent來替代,以過濾掉html標簽。

  今天比較累了,想睡覺了,先寫這么多吧。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91久久国产婷婷一区二区| 亚洲欧美日韩国产精品| 国产69精品久久久久9| 777777777亚洲妇女| 亚洲国产中文字幕久久网| 欧美xxxx18性欧美| 青青精品视频播放| 欧美激情一区二区久久久| 欧美久久精品一级黑人c片| 91在线观看免费| 久久精品欧美视频| 全亚洲最色的网站在线观看| 51精品国产黑色丝袜高跟鞋| 一区二区三区亚洲| 91精品视频一区| 日韩精品亚洲元码| 国产精品久久婷婷六月丁香| 国产日韩欧美视频| 精品国产一区二区三区久久狼黑人| 尤物99国产成人精品视频| 2024亚洲男人天堂| 丰满岳妇乱一区二区三区| 欧美在线视频在线播放完整版免费观看| 欧美疯狂做受xxxx高潮| 91沈先生作品| 日韩成人网免费视频| 色偷偷9999www| 懂色aⅴ精品一区二区三区蜜月| 日韩在线视频观看正片免费网站| 国产精品久久久久久久久久尿| 国产偷亚洲偷欧美偷精品| 91免费看视频.| 欧美日韩性生活视频| 日韩精品欧美激情| 欧美久久精品一级黑人c片| 国产精品久久91| 亚洲一区二区中文字幕| 夜夜嗨av一区二区三区免费区| 精品国产一区二区三区久久久狼| 欧美亚洲国产另类| 少妇久久久久久| 黑人极品videos精品欧美裸| 一本色道久久88综合亚洲精品ⅰ| 91精品久久久久久久久久久久久| 久久精品中文字幕电影| 亚洲欧美日韩久久久久久| 国产精品黄页免费高清在线观看| 欧美一级免费视频| 国产精品久久av| 国产98色在线| 日韩av在线影视| 久久夜精品va视频免费观看| 国产免费一区视频观看免费| 国产成人精品国内自产拍免费看| 亚洲在线一区二区| 亚洲天堂男人天堂| 992tv成人免费影院| 日韩中文字幕免费视频| 久久久电影免费观看完整版| 亚洲免费成人av电影| 亚洲欧洲日产国码av系列天堂| 久久全球大尺度高清视频| 欧美激情精品久久久久久大尺度| 成人精品网站在线观看| 欧美日韩福利在线观看| 琪琪第一精品导航| 国产精品视频久| 欧美黑人一区二区三区| 日韩在线观看成人| 精品国产一区二区三区久久久狼| 欧美电影免费播放| 日韩精品小视频| 久久久国产一区二区| 国产精品v日韩精品| 97人人模人人爽人人喊中文字| 日韩在线观看免费高清| 日韩成人xxxx| 亚洲精品99久久久久中文字幕| 欧美成在线观看| 日本久久久久亚洲中字幕| 亚洲国产天堂久久国产91| 欧美激情精品久久久久久久变态| 久久亚洲精品一区二区| 久久久久久网址| 亚洲国产日韩欧美在线99| 欧美国产中文字幕| 亚洲激情视频网站| 国产精品国产福利国产秒拍| 亚洲电影av在线| 97视频在线观看免费高清完整版在线观看| 久久久久久久久久久免费精品| 成人黄色av播放免费| 亚洲在线观看视频网站| 欧美亚洲激情在线| 97精品在线视频| 91久热免费在线视频| 日韩美女av在线| 最近2019好看的中文字幕免费| 国产日本欧美一区二区三区| 亚洲欧美制服中文字幕| 亚洲国产精品va在线看黑人动漫| 最近2019好看的中文字幕免费| 亚洲精品有码在线| www日韩欧美| www.久久久久久.com| 国产精品一区二区久久精品| 久久久久久久影院| 91国自产精品中文字幕亚洲| 91视频国产精品| 欧美老肥婆性猛交视频| 午夜精品一区二区三区在线视| 俺去啦;欧美日韩| 国产在线98福利播放视频| 国产精品久久久久久av| 国产精品一区二区三区久久久| 亚洲综合最新在线| 久久久www成人免费精品张筱雨| 51ⅴ精品国产91久久久久久| 亚洲日韩中文字幕| 亚洲一区二区三区视频播放| 疯狂欧美牲乱大交777| 欧美老少做受xxxx高潮| 国产精品久久久久99| 疯狂蹂躏欧美一区二区精品| 日韩亚洲第一页| 日韩欧美国产激情| 欧美精品久久久久久久久久| 欧美成人精品不卡视频在线观看| 日韩一区二区在线视频| 91精品视频免费| 日本三级韩国三级久久| 久久精品视频va| 国产精品久久久久久久7电影| 国产综合福利在线| 日韩精品中文字| 久热在线中文字幕色999舞| 欧美性猛交xxxx免费看久久久| 亚洲男人的天堂网站| 国产精品十八以下禁看| 精品在线小视频| 亚洲成人激情图| 亚洲精品视频播放| 91精品国产高清自在线看超| 国产免费久久av| 亚洲女人天堂网| 97视频在线看| 久久久之久亚州精品露出| 日韩av成人在线观看| 国产精品第3页| 欧洲午夜精品久久久| 欧美丰满片xxx777| 国产精品91在线观看| 国产精品视频xxx| 欧美大尺度在线观看| 日韩视频免费在线观看| 欧美床上激情在线观看| 中文字幕亚洲综合久久| 97国产suv精品一区二区62| 日本精品视频在线播放| 久久久久久久成人| 欧美久久精品一级黑人c片| 91福利视频网| 亚洲高清久久网| 在线电影中文日韩|