JavaScript Interview Questions
  • JavaScript Interview Questions
  • Contact
  • Introduction
  • Question 1
  • Question 2
  • Question 3
  • Question 4
  • Question 5
  • Question 6
  • Question 7
  • Question 8
  • Question 9
  • Question 10
  • Question 11
  • Question 12
  • Question 13
  • Question 14
  • Question 15
  • Question 16
  • Question 17
  • Question 18
  • Question 19
  • Question 20
  • Question 21
  • Question 22
  • Question 23
  • Question 24
  • Question 25
  • Question 26
  • Question 27
  • Question 28
  • Question 29
  • Question 30
  • Question 31
  • Question 32
  • Question 33
  • Question 34
  • Question 35
  • Question 36
  • Question 37
  • Question 38
  • Question 39
  • Question 40
  • Question 41
  • Question 42
  • Question 43
  • Question 44
  • Question 45
  • Question 46
  • Question 47
  • Question 48
  • Question 49
  • Question 50
  • Question 51
  • Question 52
  • Question 53
  • Question 54
  • Question 55
  • Question 56
  • Question 57
  • Question 58
  • Question 59
  • Question 60
  • Question 61
  • Question 62
  • Question 63
  • Question 64
  • Question 65
  • Question 66
  • Question 67
  • Question 68
  • Question 69
  • Question 70
  • Question 71
  • Question 72
  • Question 73
  • Question 74
  • Question 75
  • Question 76
  • Question 77
  • Question 78
  • Question 79
  • Question 80
  • Question 81
  • Question 82
  • Question 83
  • Question 84
  • Question 85
  • Question 86
  • Question 87
  • Question 88
  • Question 89
  • Question 90
  • Question 91
  • Question 92
  • Question 93
  • Question 94
  • Question 95
  • Question 96
  • Question 97
  • Question 98
  • Question 99
  • Question 100
  • Epilogue
Powered by GitBook
On this page
  • Question
  • Answer

Question 70

Question

Can you explain how to use web workers with BroadcastChannel API for communication between windows?

Answer

Combining Web Workers and the BroadcastChannel API provides a powerful way to enable communication between different browser windows, even across domains if configured properly. Here's how you can implement it:

Understanding the Components:

  • Web Workers: Independent JavaScript threads that run in separate contexts from your main web page. They are excellent for offloading computationally intensive tasks, improving responsiveness, and enabling asynchronous operations.

  • BroadcastChannel API: A browser API allowing communication between different tabs or windows of a website or even across domains if configured with window.postMessage. It's based on message passing, where messages are sent and received asynchronously.

Implementation Steps:

  1. Set Up Communication Channels in Each Window:

    • In each window that needs to communicate (e.g., multiple tabs), create a BroadcastChannel instance. Use a unique name for the channel so different windows can find each other:

      const channel = new BroadcastChannel('my-communication-channel'); 
  2. Send and Receive Messages:

    • Sending: Use .postMessage() to send messages through the BroadcastChannel:

    channel.postMessage({ messageType: 'someData', data: 'value' }); // Example message
    • Receiving: Listen for incoming messages on your channel using a .onmessage listener:

      channel.onmessage = (event) => {
        const receivedMessage = event.data; 
        console.log('Received message:', receivedMessage); // Handle the data
        // ... Your code to process the received message
      };
  3. Handling Messages in Web Workers:

    • If you're using Web Workers, you'll need to set up a similar mechanism within your worker script.

    • Create a BroadcastChannel instance inside your worker and handle messages as described above.

  4. Communication Pattern Example (Across Windows):

    • Window A (Sender):

      const channel = new BroadcastChannel('my-communication-channel');
      // Send data to other windows
      channel.postMessage({ type: 'update', value: 'New Data' }); 
    • Window B (Receiver):

      const channel = new BroadcastChannel('my-communication-channel');
      channel.onmessage = (event) => {
        console.log(event.data); // Handle received message from Window A
      };

Key Points and Considerations:

  • Channel Names: Choose unique channel names to avoid conflicts between different communication purposes.

  • Data Format: Messages should be in a format that both the sender and receiver understand (e.g., JSON).

PreviousQuestion 69NextQuestion 71

Last updated 9 months ago