HTML5 Web Workers


Web worker is JavaScript running in the background and will not affect the performance of the page.


What is Web Worker?

When executing a script in an HTML page, the state of the page is unresponsive until the script has completed.

Web worker is JavaScript that runs in the background, independent of other scripts and will not affect the performance of the page. You can continue to do whatever you want: click, select, etc. while the web worker runs in the background.


Browser support

Internet Explorer

Internet Explorer 10, Firefox, Chrome, Safari and Opera all support Web workers.


HTML5 Web Workers Example

The following example creates a simple web worker that counts in the background:

Example

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>php中文网(php.cn)</title> 
</head>
<body>

<p>计数: <output id="result"></output></p>
<button onclick="startWorker()">开始工作</button> 
<button onclick="stopWorker()">停止工作</button>

<p><strong>注意:</strong> Internet Explorer 9 及更早 IE 版本浏览器不支持 Web Workers.</p>

<script>
var w;

function startWorker() {
    if(typeof(Worker) !== "undefined") {
        if(typeof(w) == "undefined") {
            w = new Worker("demo_workers.js");
        }
        w.onmessage = function(event) {
            document.getElementById("result").innerHTML = event.data;
        };
    } else {
        document.getElementById("result").innerHTML = "抱歉,你的浏览器不支持 Web Workers...";
    }
}

function stopWorker() 
{ 
    w.terminate();
    w = undefined;
}
</script>

</body>
</html>

Run instance»

Click the "Run instance" button to view the online instance

demo_workers.js file code:

var i=0;

function timedCount()
{
i=i+1;
postMessage(i);
setTimeout("timedCount()",500);
}

timedCount();



Detect whether the browser supports Web Worker

Before creating a web worker, please Check if the user's browser supports it:

if(typeof(Worker)!=="undefined")
{
// Yes! Web worker support!
/ / Some code.....
}
else
{
// Sorry! No Web Worker support..
}



Creating the web worker file

Now, let's create our web worker in an external JavaScript.

Here we create the counting script. The script is stored in the "demo_workers.js" file:

var i=0;

function timedCount()
{
i=i+1;
postMessage(i);
setTimeout("timedCount()",500);
}

timedCount();

The important part of the above code is the postMessage() method - it is used to pass a message back to the HTML page.

Note: Web workers are typically not used for such simple scripts, but for more CPU-intensive tasks.


Create Web Worker Object

We already have the web worker file, now we need to call it from the HTML page. /p>

The following code detects whether the worker exists, if not - it creates a new web worker object and then runs the code in "demo_workers.js": /p>

if(typeof(w)=="undefined")
{
w=new Worker("demo_workers.js");
}

Then we can send and receive messages from the web worker.

Add an "onmessage" event listener to the web worker:

w.onmessage=function(event){
document.getElementById("result").innerHTML= event.data;
};

<pWhen web="" worker="" delivers a message, the code in the event listener is executed. event.data="" contains data from ="" event.data="".