← Back to HTML Course | Chapter 7: Advanced APIs & Features | Lesson 6 of 11

HTML Web Workers

सोचिए आप एक व्यस्त रेस्टोरेंट किचन चला रहे हैं। अगर आप अकेले शेफ हैं, तो आपको ऑर्डर लेना, खाना बनाना, बर्तन धोना, और टेबल साफ करना—सब खुद करना पड़ता है। अगर कोई कस्टमर ऐसी कॉम्प्लेक्स डिश ऑर्डर करता है जिसे बनाने में एक घंटा लगता है, तो बाकी सब कुछ रुक जाता है, और बाकी कस्टमर्स परेशान हो जाते हैं। अब सोचिए आप एक prep cook (Web Worker) रख लेते हैं। आप कॉम्प्लेक्स, धीमे प्रेप काम को पीछे के कमरे में संभालने के लिए उन्हें सौंप सकते हैं, जबकि आप जल्दी से डिश प्लेट करने और परोसने पर ध्यान देते हैं। HTML Web Worker बिल्कुल यही करता है। यह एक बैकग्राउंड स्क्रिप्ट है जो पीछे चलती रहती है, जिससे आपका वेबपेज कॉम्प्लेक्स टास्क (जैसे टेक्स्ट एनालाइज़ करना या फाइलें कंप्रेस करना) बिना अपने यूज़र इंटरफेस को फ्रीज़ किए हैंडल कर पाता है।
Syntax
markup
const worker = new Worker("worker.js");
worker.postMessage(data);
worker.onmessage = (event) => { /* event.data */ };

Multi-Threaded ब्राउज़िंग को समझना

वेब ब्राउज़र आमतौर पर सभी स्क्रिप्ट्स को एक ही main thread पर चलाते हैं, जो पेज रेंडरिंग और यूज़र इंटरैक्शन्स को भी हैंडल करता है। अगर कोई स्क्रिप्ट कोई भारी, कॉम्प्लेक्स टास्क चलाती है, तो main thread फ्रीज़ हो जाता है, जिससे पेज अनरिस्पॉन्सिव हो जाता है।

Note: भारी कैलकुलेशन्स को ऑफलोड करने और अपने पेज को स्मूद और रिस्पॉन्सिव बनाए रखने के लिए Web Workers का उपयोग करें।
Warning: Web Workers वेबपेज के DOM या window ऑब्जेक्ट्स को सीधे एक्सेस नहीं कर सकते; वे सिर्फ मैसेज के ज़रिए कम्युनिकेट करते हैं।

उदाहरण: Understanding Multi-Threaded Browsing

markup
<script>
  // Without a worker, a heavy loop here would freeze the page
  const worker = new Worker('worker.js');
</script>

एक Web Worker बनाना

Web Worker बनाने के लिए, आप अपनी main स्क्रिप्ट के अंदर एक नया Worker ऑब्जेक्ट इनिशियलाइज़ करते हैं, जो एक अलग JavaScript फाइल की ओर पॉइंट करता है जिसमें वह कोड होता है जिसे आप बैकग्राउंड में चलाना चाहते हैं।

Note: अपने प्रोजेक्ट के अंदर worker.js नाम की एक अलग फाइल में अपना बैकग्राउंड worker कोड सेव करें।
Warning: सुनिश्चित करें कि आपका worker फाइल पाथ सही हो, क्योंकि टूटे हुए लिंक worker को initialize होने से रोक देंगे।

उदाहरण: Creating a Web Worker

markup
<script>
  const worker = new Worker('worker.js');
</script>

मैसेज एक्सचेंज करना (postMessage)

चूंकि Web Workers एक अलग थ्रेड पर चलते हैं, इसलिए वे सीधे आपके पेज एलिमेंट्स को मॉडिफाई नहीं कर सकते। इसके बजाय, वे postMessage मेथड का उपयोग करके और onmessage इवेंट से सुनकर आपकी main स्क्रिप्ट के साथ आगे-पीछे मैसेज भेजकर कम्युनिकेट करते हैं।

Note: डेटा इनपुट्स को अपने worker तक पास करने के लिए postMessage का उपयोग करें, और काम पूरा होने पर worker को कैलकुलेट किए गए नतीजे वापस भेजने दें।
Warning: डेटा फ्लो मैनेज करने के लिए हमेशा अपनी main स्क्रिप्ट और worker फाइल दोनों में साफ message handlers लिखें।

उदाहरण: Exchanging Messages (postMessage)

markup
<script>
  const worker = new Worker('worker.js');
  worker.postMessage('start');
  worker.onmessage = function (event) {
    console.log('Result:', event.data);
  };
</script>

Worker थ्रेड्स को समाप्त करना

चलते समय Web Workers सिस्टम मेमोरी और CPU संसाधन खपत करते हैं। अपने ऐप को अच्छी तरह परफॉर्म करते रहने के लिए, आपको हमेशा अपनी main स्क्रिप्ट से terminate मेथड का उपयोग करके, या worker के अंदर से close करके, काम पूरा होते ही workers को समाप्त कर देना चाहिए।

Note: डिवाइस मेमोरी खाली करने के लिए बैकग्राउंड workers को उनका काम पूरा होते ही तुरंत समाप्त कर दें।
Warning: एक बार worker terminate हो जाने पर उसे दोबारा शुरू नहीं किया जा सकता; टास्क फिर से चलाने के लिए आपको एक नया worker instance बनाना होगा।

उदाहरण: Terminating Worker Threads

markup
<script>
  const worker = new Worker('worker.js');
  worker.terminate();
</script>

Web Worker की सीमाएँ

चूंकि Web Workers एक अलग बैकग्राउंड थ्रेड पर चलते हैं, उनकी कुछ सख्त सीमाएँ हैं: वे DOM, window ऑब्जेक्ट, या लोकल पेज एलिमेंट्स को एक्सेस नहीं कर सकते, और उन्हें बाहरी स्क्रिप्ट्स importScripts मेथड का उपयोग करके लोड करनी होती हैं।

Note: Web Workers का उपयोग सख्ती से रॉ डेटा प्रोसेस करने और कैलकुलेशन्स के लिए करें, और पेज लेआउट अपडेट करने के लिए अपनी main स्क्रिप्ट का उपयोग करें।
Warning: Web Worker फाइलों को Cross-Origin Resource Sharing (CORS) नियमों का पालन करना होगा, वरना ब्राउज़र उन्हें ब्लॉक कर देगा।

उदाहरण: Web Worker Constraints

markup
<script>
  const worker = new Worker('worker.js');
  worker.postMessage('data');
  // worker.js cannot access document or window directly
</script>
Live Example
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.