HTML5中的Web Worker技術

  爲了讓後臺程序更好的執行,在HTML5中設計了Web Worker技術。Web Worker的產生主要是考慮到在HTML4中JavaScript Web程序都是以單線程的方式執行的,一旦前面的腳本花費時間過長,後面的程序就會因長期得不到響應而使用戶頁面操做出現異常。html

  Web Worker實現的是線程技術,能夠使運行在後臺的JavaScript獨立於其餘腳本,從而不會影響頁面的性能。瀏覽器

  示例:函數

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>Document</title>
 8 </head>
 9 <body>
10     <div id="num"></div>
11     <button onclick="startWork()">開始</button>
12     <button onclick="stopWork()">中止</button>
13     <script>
14         var work;
15 
16         function startWork() {
17             if(typeof(Worker)!=undefined) {
18                 if(work==undefined) {
19                     work = new Worker("script/01.js");
20                     work.onmessage = function(event) {
21                         document.getElementById("num").innerHTML = event.data;
22                     }
23                 }
24             }
25         }
26 
27         function stopWork() {
28             if(work!=undefined) {
29                 work.terminate();
30             }
31         }
32     </script>
33 </body>
34 </html>

 

上面的代碼引入了一個腳本文script/01.js,代碼以下:post

 1 var i=0;
 2 
 3 function timeCount() {
 4     i=i+1;
 5     console.log(i);
 6     postMessage(i);
 7     setTimeout("timeCount()",1000);
 8 }
 9 
10 timeCount();

 

這個示例實現了一個計數器的功能,點擊開始按鈕,開始計數,點擊中止按鈕,中止計數。性能

下面我來解釋一下代碼的流程:ui

網頁第17行,檢測瀏覽器是否支持Web Worker技術,主流的瀏覽器谷歌、火狐都支持,IE只有IE10,IE11,IE Edge支持,低版本的IE不支持spa

網頁第19行,引入js腳本,建立一個Worker對象的實例,並執行js腳本線程

js腳本第6行,在執行腳本的時候,使用postMessage方法,傳遞給網頁數據設計

網頁第20行,在腳本使用postMessage方法傳遞數據後,onmessage回調函數會接收傳遞過來的數據,對該數據進行處理code

網頁第19行,若是須要中止Worker,使用work.terminate();能夠中止正在執行的腳本

相關文章
相關標籤/搜索