वेब वर्कर: वर्तमान मुख्य (विंडो) थ्रेड की तुलना में पृष्ठभूमि में स्क्रिप्ट को अलग थ्रेड में चलाने का एक तरीका।
जावास्क्रिप्ट आमतौर पर कार्यों को संबंधित कतारों (मैक्रो-टास्क कतार, माइक्रो-टास्क कतार) में रखकर अतुल्यकालिक संचालन को संभालता है, इवेंट लूप लगातार इन कतारों की जांच करता है और कार्यों को कॉल स्टैक में धकेलता है जब वे निष्पादित होने के लिए तैयार होते हैं। यह दृष्टिकोण गैर-अवरुद्ध निष्पादन सुनिश्चित करता है लेकिन फिर भी सब कुछ एक ही थ्रेड पर चलाता है।
वेब वर्कर्स, दूसरी ओर, स्क्रिप्ट को अपने कॉल स्टैक, एसिंक्रोनस क्यू और इवेंट लूप के साथ पूरी तरह से अलग थ्रेड में चलाने की अनुमति देते हैं। यह पृथक्करण मुख्य थ्रेड को भारी गणना या लंबे समय तक चलने वाले कार्यों द्वारा अवरुद्ध होने से बचाता है, क्योंकि कार्यकर्ता स्वतंत्र रूप से काम करता है।
वेब कार्यकर्ता मुख्य विंडो संदर्भ की तुलना में एक अलग संदर्भ में स्क्रिप्ट निष्पादित करते हैं, जिससे वेब अनुप्रयोगों में समानता सक्षम होती है। वेब वर्कर एपीआई कई प्रकार के कर्मचारी प्रदान करता है:
यह लेख समर्पित कार्यकर्ताओं पर केंद्रित है, जिन्हें लागू करना सबसे आसान है और आमतौर पर उपयोग किया जाता है।
एक वेब वर्कर बनाने के लिए, आप निम्नलिखित प्रमुख तरीकों का उपयोग कर सकते हैं:
आइए एपीआई से डेटा लाने के लिए एक कार्यकर्ता बनाएं, विशेष रूप से डॉग सीईओ एपीआई से कुत्ते की छवियां।
यहां वर्कर स्क्रिप्ट का कार्यान्वयन है। ध्यान दें कि कार्यकर्ता के अंदर, self का उपयोग वैश्विक संदर्भ को संदर्भित करने के लिए किया जाता है:
if (window.Worker) { const worker = new Worker("/src/worker.js"); worker.postMessage({ operation: "get_dog_imgs", url: "https://dog.ceo/api/breeds/image/random", count: 5 //number of photos }); worker.onmessage = (e) => { console.log(e.data); if (e && e.data) { setdata((old) => [...old, e.data]); // update react state showCallStack(); // function to show the callstack } }; worker.onerror = (e) => { console.log(e); }; }
इस कोड में, कार्यकर्ता संदेशों को सुनता है (संदेश पर) और दिए गए यूआरएल से गिनती के अनुसार कई बार डेटा प्राप्त करता है।
यहां कार्यकर्ता के अंदर कॉल स्टैक कैसा दिखता है:
मुख्य थ्रेड कार्यकर्ता का उपयोग इस प्रकार करता है:
self.onmessage = (event) => { const data = event.data; if (data && data.url && data.count) { fetchFromUrls(data.url, data.count); } } // fetch single data const fetchdata = async (url) => { const res = await self.fetch(url); return await res.json(); }; const fetchFromUrls = async (url, count) => { showCallStack(); // showing the callstack of the worker for (const i of new Array(count).fill(0)) { let data = await fetchdata(url); if (data && data.message) { self.postMessage({ type: "img", data: data.message }); } } };
यह कोड दर्शाता है कि कार्यकर्ता को संदेश कैसे भेजा जाए और मुख्य थ्रेड में प्राप्त डेटा कैसे प्राप्त किया जाए।
पूरे कोड के लिए कोड पर जाएं
जबकि वेब वर्कर मुख्य विंडो थ्रेड से एक अलग थ्रेड में चलते हैं, वे कुछ सीमाओं के साथ आते हैं:
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3