HTML and CSS Reference
port object, in the current implementation of shared web workers there is always only one port in the
ports array; thus you access the port object at array index 0.
The addEventListener() method wires an event-handler function— SendMessageToPage() —for the
port object's message event. The start() method of the port object starts the communication channel.
n Note Although it isn't used in this example, the port object also has a close() method. This method closes a
port and stops any further communication on that port.
The SendMessageToPage() event-handler function contains the same processing logic ( do - while loop)
as before. To send the result of the processing back to the web form, postMessage() is called on the port
object. The string message sent by the web form is retrieved using the evt.data property, and extra string
data is appended to it.
If you run the web form and click the Start Work button, you should see an alert box as shown in
Figure 10-6. Shared web worker in action
Figure 10-6 shows that the script is being executed properly by the shared web worker. If you wish to
see the effect on thread utilization of using shared web workers, open the Resource Monitor and look at
the entries for Chrome.exe as before (Figure 10-7).
Figure 10-7 shows the Resource Monitor when the web form is open in two Chrome tabs. In all, there
are four active entries for Chrome.exe . The one with 29 threads is for the main browser window. Every open
tab takes 6 threads. So, the 2 entries with 6 threads each are for the 2 tabs in which the web form is loaded.
Another set of 6 threads is created when you click the Start Work button for the first time; they're used for
running the shared web workers. If you click Start Work multiple times, there is no further increase in the
thread count because the previously created shared worker threads are reused by subsequent requests.
n Note Subsequent executions of the script running in a shared web worker get the previous state of the global
variables. Also, if a shared web worker is already being used by a page, other pages interested in gaining access to
the same shared web worker need to wait until the current processing is complete.