js的webworker簡單示例

前端的同學應該都知道js是單線程,異步IO的,但是其實他也是可以實現多線程的,只不過還是受制於主線程,不能夠有一些操作dom的行爲,說白了其實就是比較消耗cpu的計算量比較大,話不多說,下面我們可以直接看代碼:
worker.html

<!DOCTYPE html>  
<html>  
<head>  
<meta charset="UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
    <!-- web worker是運行在後臺的javascript,不會影響頁面的性能 -->  
    <p>計數:<output id="result"></output></p>  
    <button onclick="startWorker()">開始worker</button>  
    <button onclick="endWorker()">停止worker</button>    
    <div id='ceshi' onclick="ceshi()">點擊我不會阻塞代碼</div>
    <br><br>  
    <script type="text/javascript">  
       var w;         
       function startWorker(){  
           if(typeof(Worker)!="undefined"){//瀏覽器支持web worker  
               if(typeof(w)=="undefined"){//w是未定義的,還沒有開始計數        
                   w = new Worker("webworker.js");//創建一個Worker對象,利用Worker的構造函數  
               }  
               //onmessage是Worker對象的properties  
               w.onmessage = function(event){//事件處理函數,用來處理後端的web worker傳遞過來的消息  
                   document.getElementById("result").innerHTML=event.data;  
               };  
           }else{  
               document.getElementById("result").innerHTML="sorry,your browser does not support web workers";  
           }  
       }    
       function endWorker(){  
          w.terminate();//利用Worker對象的terminated方法,終止  
          w=undefined;  
       } 
       function ceshi(){
           console.log(555)
       }
    </script>  
</body>  
</html>  
webworker.js
var i = 0;  

function timeCount(){  
  i = i + 1;  
  postMessage(i);//postMessage是Worker對象的方法,用於向html頁面回傳一段消息  
  setTimeout("timeCount()",500);//定時任務  
}  
timeCount();//加1計數,每500毫秒調用一次  

這裏有一點要注意,new Worker(“webworker.js”) 裏面的參數爲另一個文件的路徑,因爲chrome是不支持直接在本地獲取資源的,所以一定要在本地起一個服務,要不然會報跨域的問題,這個當時困擾我了好久啊!!!!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章