Javascript Course

Web Worker is a JavaScript object running in the background, without affecting the performance of the page. The worker thread can perform tasks without interfering with the user interface.
You can continue to do whatever you want: clicking, selecting things, etc., while the web worker runs in the background.

Creating a Web Worker

Generally, a JavaScript web worker is created in a separated file on server, for exampe worker.js. This file contains the code that will run in the worker thread.

You can run whatever JS code you like inside the worker file, with some exceptions.
You can't directly manipulate the DOM from inside a worker, or use default methods and properties of the window, document, and parent objects. But you can use a large number of items available under window, including: XMLHttpRequest (Ajax), WebSockets, Navigator and IndexedDB.

In the page where you want to use the web worker, create an Worker object instance with this syntax.

 var wrk = new Worker('worker.js');
- Once created a JS code in the worker.js file (or whatever name you want), it can send messages to the JavaScript code that created the Worker instance.

Data is sent between workers and the main thread via a system of messages — both sides send their messages using the postMessage() method, and can get the data via the onmessage event handler. The data is stored in the property.

Simple JavaScript Worker exampe

Here is an exampe, a script that displays a count number which runs continuously in a worker file. The script is stored in the "workers_ex.js" file and used it into a webpage.

Code in workers_ex.js

var ic =0;

function timedCount(){
 setTimeout('timedCount()', 500);


Code in webpage

<h4>Example JavaScript Worker</h4>
<blockquote>Count numbers: <b id='resp'></b></blockquote>
<button id='bt_startw'>Start Worker</button> - 
<button id='bt_stopw'>Stop Worker</button> - 

var wrk; //to store Worker object
var resp = document.getElementById('resp');

function startWorker(){
 //if wrk undefined or false, defines it
 if(!wrk) wrk = new Worker('javascript/worker_ex.js');

 //adds data in #resp when message from worker
 wrk.addEventListener('message', (ev)=>{
 resp.innerHTML =;

function stopWorker(){ 
 wrk = false;

//click event on Start /Stop Worker buttons
document.getElementById('bt_startw').addEventListener('click', startWorker);
document.getElementById('bt_stopw').addEventListener('click', stopWorker);

Receiving data in the worker file

The page script cand send data to the worker script with the postMessage() method.

var wrk = new Worker('worker.js');
wrk.postMessage('Data sent to worker');

The worker receives data via the onmessage event, in the property.
addEventListener('message', (ev)=>{
 var data =;

You can send any type of data with postMessage(): string, number, array, object, boolean.

- Example, when the user types some text into an input field, data is send as a string to an worker that sends back an object with the string in reverse order, and the number of characters.

Code in worker_ex.js

//when data is received from webpage
addEventListener('message', (ev)=>{
 var str =;

 //object with data to send with postMessage()
 var re ={s:str.split('').reverse().join(''), n:str.length};

Code in webpage

<h4>Example data to worker</h4>
<p>Type some text in this field:</p>
Text: <input type='text' id='inp1'/>
<blockquote id='resp'>Here it displays the text reversed, and number of characters.</blockquote>

var resp = document.getElementById('resp');

//defines Worker object if the browser supports it
var wrk = (window.Worker) ? new Worker('javascript/worker_ex.js') :false;

//if wrk defined
 //on keyup event
 document.getElementById('inp1').addEventListener('keyup', (ev)=>{
 wrk.postMessage(; //post data to worker

 //gets data from worker
 wrk.addEventListener('message', (ew)=>{
 if( resp.innerHTML ='Reversed text: '+ +'<br>Nr. characters: '+;

Normally web workers are not used for such simple scripts, but for more CPU intensive tasks, in applications like games, WebSockets, and repetitive ajax requests.
To debug the JS code in worker file, you can use console.log() method in that file.

Terminate Worker

When a web worker object is created, it will continue to listen for messages (even after the external script is finished) until it is terminated.
To terminate a web worker from the main page, and free browser/computer resources, use the terminate() method.


In the worker thread, workers may close themselves by calling their own close() method.
//worker file
// code to run..

if(some condition) close();

Importing scripts in worker file

With the importScripts() function you can import one or more external scripts in the worker file.

importScripts('foo.js'); //imports foo.js
importScripts('foo.js', 'bar.js'); //imports two scripts
importScripts('//'); //imports scripts from other domain
The browser loads and executes each listed script. Any global objects from each script may then be used by the worker.

Daily Test with Code Example

Which attribute is used in <img> tag for the address of the image?
href src rel
<img src="" width="191" height="63" alt="Courses-Web" />
Which CSS code hides the element on page?
display: none; display: inline; position: relative;
#id {
  display: none;
What instruction stops the execution of a while() or for() statement?
continue prompt() break
for(var i = 0; i< 8; i++) {
  if(i > 1) break;
Indicate the function that can create a constant.
define() include() defined()
define("CONSTANT_NAME", "value");
JavaScript Worker

Last accessed pages

  1. PHP PDO - prepare and execute (9101)
  2. Making DIV Contents Scroll Horizontally, with multiple Div`s inside (59462)
  3. jQuery parent, children and nth-child() (13805)
  4. Node.js Move and Copy Directory (19906)
  5. PHP Unzipper - Extract Zip, Rar Archives (31611)

Popular pages this month

  1. Courses Web: PHP-MySQL JavaScript Node.js Ajax HTML CSS (584)
  2. PHP Unzipper - Extract Zip, Rar Archives (280)
  3. SHA1 Encrypt data in JavaScript (185)
  4. Read Excel file data in PHP - PhpExcelReader (148)
  5. Get and Modify content of an Iframe (141)