- Overview
- Transcript
9.4 Web Workers
Web workers provide a way for us to offload complex processing to a worker thread to avoid blocking the main UI thread. In this lesson we’ll see how to use dedicated workers.
Key terms:
new Worker()
postMessage
onMessage
terminate
1.Introduction2 lessons, 07:42
1.1Introduction02:12
1.2Setup05:30
2.Language Fundamentals8 lessons, 1:00:53
2.1Variables06:33
2.2Data Types11:28
2.3Arithmetic, Assignment, and Comparison Operators10:24
2.4Unary, Logical, Comma, and Spread Operators09:02
2.5Operator Precedence03:50
2.6Reserved Words04:17
2.7Strict Mode04:34
2.8Functions10:45
3.Data Structures5 lessons, 22:52
3.1Arrays04:29
3.2Objects04:30
3.3Sets04:57
3.4Maps04:21
3.5Weak Maps and Weak Sets04:35
4.Controlling Program Execution7 lessons, 37:06
4.1Conditionals07:49
4.2Switch Statements04:41
4.3The For Loop06:39
4.4The `for .. in` Loop05:17
4.5The `for .. of` Loop04:02
4.6Iterators05:03
4.7While Loops03:35
5.Using JavaScript13 lessons, 1:44:36
5.1Working With Strings09:32
5.2Template Literals05:46
5.3Working With Numbers06:57
5.4Working With Arrays12:53
5.5Iterating and Transforming Arrays07:33
5.6Working With the Object Type13:55
5.7Object Literal Extensions06:45
5.8Working With Object Instances06:45
5.9Getters and Setters05:00
5.10Custom Objects11:28
5.11The `Math` API04:54
5.12Working With Dates and Times08:10
5.13The `Array` Constructor04:58
6.Functions8 lessons, 56:07
6.1The `this` Object06:15
6.2Working With Functions10:11
6.3Scope07:37
6.4Arrow Functions06:59
6.5Generator Functions08:13
6.6Closures05:00
6.7Prototypes06:26
6.8Default and Rest Parameters05:26
7.Miscellaneous6 lessons, 52:39
7.1Destructuring Assignments08:09
7.2AJAX08:30
7.3Regular Expressions10:51
7.4More About Regular Expressions08:38
7.5Classes06:48
7.6ES Modules09:43
8.Working With the DOM6 lessons, 37:39
8.1Selecting HTML Elements05:02
8.2Manipulating HTML Elements07:40
8.3DOM Traversal05:25
8.4Adding and Removing Elements04:45
8.5Creating Elements and Other Nodes04:39
8.6DOM Events10:08
9.Web APIs4 lessons, 17:41
9.1The Selector API03:03
9.2Geolocation05:29
9.3Web Storage05:24
9.4Web Workers03:45
10.Asynchronous JavaScript5 lessons, 26:23
10.1Promises09:52
10.2Promise Chaining05:11
10.3The async Keyword03:21
10.4The await Keyword04:04
10.5More About async and await03:55
11.Conclusion1 lesson, 00:43
11.1Conclusion00:43
9.4 Web Workers
Hi, folks. In this lesson we're going to take a look at web workers. Web workers are a way to execute code in a different thread than the main UI thread. The idea is that if we want to do some heavy processing we can offload this to a different thread than the main UI thread to avoid blocking the user interface. When we create a new web worker, we specifile the file that contains the code for the web worker. Before we create one, let's add a new file that can be used as the worker. We can call it worker.js. So back in the main script now, let's create a worker and point it to this new file. So we create a new worker using the worker constructor. The constructor takes an argument, and that is the path to the file that we want to use as the worker. In this case, it's worker.js. In order to communicate with the worker we need to send it a message. And we do that using the postMessage interface. In this case we send a simple string message that just says hello from the main script. Inside the worker then, we need to add a message handler that will be executed whenever the worker receives a message from the main script. Inside a file opened as a web worker the onmessage property is globally available for us to assign a function to. This function will act as a handler and will be invoked whenever a message object is received. It will pass an event object to our handler and we can access any data sent from the main script using the data property of this event objects. We can also send messages back to the main script from the web worker. PostMessage is a globally available function inside files opened as workers. It works in the same way as the postMessage function that we used in the main script does. And again, we can just pass back a simple string message. So back in the main script now, we can also add message handlers to the worker objects in the main script. And we can access any data sent from the worker back to the main script in the same way. So we can see both of the log messages from the main script and the worker script. Once we finished with the web worker, we need to terminate it. We can do that with the terminate method. We need to use setTimeout because if we terminate the worker immediately none of the messages will get sent. The terminate method doesn't take any arguments and it immediately terminates the worker script so the worker will no longer be available to receive or send messages. This type of worker is a dedicated web worker. There are also shared workers which can be used by multiple separate pages at the same time. We aren't going to look at these in this lesson. So in this lesson we looked at web workers, which are a way for us to spawn new threads that are separate from the main UI thread. We saw that we can send data between the main script and the worker using postMessage and onMessage event handlers. This now brings us to the end of the practical side of the course. There are just a few closing words from me in the concluding lesson. Thanks for watching.