जावास्क्रिप्ट प्रोग्रामर नकली समानता के लिए उपयोग किए जाते हैं, लेकिन वास्तविक समानता प्राप्त करने का एक तरीका है जिसका आपको अभी उपयोग करना चाहिए।

जावास्क्रिप्ट प्रदर्शन-गहन कार्यों के साथ संघर्ष कर सकता है क्योंकि यह एकल-थ्रेडेड भाषा है। समानता का उपयोग करके, आप जावास्क्रिप्ट में बहु-थ्रेडेड निष्पादन प्राप्त कर सकते हैं और अपने आधुनिक वेब ऐप्स के प्रदर्शन और जवाबदेही में सुधार कर सकते हैं।

जावास्क्रिप्ट प्रोग्रामिंग में समानता

प्रदर्शन और मापनीयता में सुधार के लिए आधुनिक कंप्यूटिंग में समानता महत्वपूर्ण है। यह उपलब्ध संसाधनों का प्रभावी ढंग से उपयोग करके ऐसा करता है।

प्रोग्रामिंग में समानता प्राप्त करने के लिए उपयोग की जाने वाली एक सामान्य तकनीक मल्टी-थ्रेडिंग है। हालाँकि, जावास्क्रिप्ट थ्रेड एक सिंगल-थ्रेड सिस्टम है और एक समय में केवल एक ही कार्य को संभाल सकता है। इसका मतलब यह है कि यह समांतर प्रोग्राम निष्पादन से अपरिचित है।

जावास्क्रिप्ट नकली समानांतर प्रोग्रामिंग

समांतरता के बारे में एक आम गलतफहमी यह है कि आप इसका उपयोग करके इसे प्राप्त कर सकते हैं अतुल्यकालिक प्रोग्रामिंग तकनीक जैसे async/प्रतीक्षा, कॉलबैक और वादे:

// Async/प्रतीक्षा फ़ंक्शन जो एक नेटवर्क अनुरोध का अनुकरण करता है
asyncसमारोहडेटा प्राप्त करें() {
कॉन्स्ट प्रतिक्रिया = इंतजार लाना();
कॉन्स्ट डेटा = इंतजार प्रतिक्रिया.जेसन ();
वापस करना आंकड़े;
}

// कॉलबैक फ़ंक्शन जो प्राप्त किए गए डेटा को कंसोल में लॉग करता है
समारोहlogData(आंकड़े) {
सांत्वना देनालॉग (डेटा);
}

// प्रॉमिस.ऑल () विधि जो समानांतर में कई वादों को निष्पादित करती है
वादा।सभी([
फ़ेचडाटा (),
फ़ेचडाटा (),
])।तब((परिणाम) => {
सांत्वना देनालॉग (परिणाम);
});

// FetchData फ़ंक्शन को कॉल करें और लॉगडेटा फ़ंक्शन को कॉलबैक के रूप में पास करें
फ़ेचडाटा ()। फिर (लॉगडाटा);

ये तकनीकें वास्तव में समानांतर में कोड निष्पादित नहीं करती हैं। जावास्क्रिप्ट अपने सिंगल-थ्रेड डिज़ाइन के भीतर समांतर प्रोग्रामिंग की नकल करने के लिए इवेंट लूप का उपयोग करता है।

इवेंट लूप जावास्क्रिप्ट रनटाइम वातावरण का एक मूलभूत हिस्सा है। यह आपको मुख्य सिंगल थ्रेड को ब्लॉक किए बिना बैकग्राउंड में एसिंक्रोनस ऑपरेशंस, जैसे नेटवर्क रिक्वेस्ट को निष्पादित करने की अनुमति देता है।

इवेंट लूप लगातार कतार में नई घटनाओं या कार्यों की जांच करता है और उन्हें क्रमिक रूप से एक-एक करके निष्पादित करता है। यह तकनीक जावास्क्रिप्ट को संगामिति और सैद्धांतिक समानता प्राप्त करने की अनुमति देती है।

समवर्ती बनाम। समानता

Concurrency और Parallelism को अक्सर JavaScript दुनिया में गलत समझा जाता है और आपस में बदल दिया जाता है।

जावास्क्रिप्ट में समवर्ती कार्यों के निष्पादन को ओवरलैप करके कई कार्यों को निष्पादित करने की क्षमता को संदर्भित करता है। जहां एक कार्य दूसरे के पूरा होने से पहले शुरू हो सकता है, लेकिन कार्य न तो एक साथ शुरू हो सकते हैं और न ही समाप्त हो सकते हैं। यह जावास्क्रिप्ट को संचालन को कुशलतापूर्वक संभालने में सक्षम बनाता है, जैसे REST API से डेटा लाना या फ़ाइलें पढ़ना, मुख्य निष्पादन थ्रेड को अवरुद्ध किए बिना।

समानांतरवाद, दूसरी ओर, कई थ्रेड्स में एक साथ कई कार्यों को निष्पादित करने की क्षमता को संदर्भित करता है। ये पृष्ठभूमि धागे कार्यों को स्वतंत्र रूप से और एक साथ निष्पादित कर सकते हैं। यह जावास्क्रिप्ट अनुप्रयोगों में वास्तविक समानता प्राप्त करने के अवसर खोलता है।

जावास्क्रिप्ट के अनुप्रयोग वास्तविक समानता प्राप्त कर सकते हैं वेब कर्मचारियों का उपयोग.

वेब कर्मचारी जावास्क्रिप्ट के लिए समानांतरवाद का परिचय देते हैं

वेब वर्कर आधुनिक वेब ब्राउज़र की एक विशेषता है जो मुख्य निष्पादन थ्रेड से अलग, जावास्क्रिप्ट कोड को बैकग्राउंड थ्रेड्स में चलाने की अनुमति देता है। मुख्य थ्रेड के विपरीत, जो उपयोगकर्ता इंटरैक्शन और UI अपडेट को हैंडल करता है। वेब वर्कर कम्प्यूटेशनल रूप से गहन कार्यों को करने के लिए समर्पित होगा।

नीचे जावास्क्रिप्ट में एक वेब वर्कर के संचालन का आरेख प्रतिनिधित्व है।

मुख्य थ्रेड और वेब वर्कर मैसेज पासिंग का उपयोग करके संवाद कर सकते हैं। का उपयोग संदेश भेजें संदेश भेजने की विधि और onmessage ईवेंट हैंडलर संदेश प्राप्त करने के लिए, आप आगे और पीछे निर्देश या डेटा पास कर सकते हैं।

एक वेब कार्यकर्ता बनाना

एक वेब वर्कर बनाने के लिए, आपको एक अलग जावास्क्रिप्ट फाइल बनाने की जरूरत है।

यहाँ एक उदाहरण है:

// main.js

// एक नया वेब वर्कर बनाएं
कॉन्स्ट कार्यकर्ता = नया कार्यकर्ता('कार्यकर्ता.जेएस');

// वेब वर्कर को एक संदेश भेजें
कार्यकर्ता पोस्ट संदेश ('मुख्य सूत्र से नमस्कार!');

// वेब वर्कर के संदेशों को सुनें
कार्यकर्ता संदेश = समारोह(आयोजन) {
सांत्वना देना।लकड़ी का लट्ठा('वेब वर्कर से प्राप्त संदेश:', घटना.डेटा);
};

उपरोक्त उदाहरण वर्कर स्क्रिप्ट के पथ को पास करके एक नया वेब वर्कर बनाता है (कार्यकर्ता.जेएस) के तर्क के रूप में मज़दूर निर्माता। आप का उपयोग करके वेब वर्कर को एक संदेश भेज सकते हैं संदेश भेजें विधि का उपयोग करके वेब वर्कर के संदेशों को सुनें और onmessage आयोजन प्रबंधकर्ता।

फिर आपको वर्कर स्क्रिप्ट बनानी चाहिए (कार्यकर्ता.जेएस) फ़ाइल:

// कार्यकर्ता.जेएस

// मुख्य सूत्र से संदेश सुनें
स्व.संदेश = समारोह(आयोजन) {
सांत्वना देना।लकड़ी का लट्ठा('मुख्य सूत्र से प्राप्त संदेश:', घटना.डेटा);

// संदेश को मुख्य थ्रेड पर वापस भेजें
सेल्फ.पोस्टमैसेज("कार्यकर्ता.जेएस से नमस्ते!");
};

वेब वर्कर स्क्रिप्ट का उपयोग करके मुख्य थ्रेड से संदेशों को सुनता है onmessage आयोजन प्रबंधकर्ता। संदेश प्राप्त होने पर, आप संदेश को अंदर से लॉग आउट कर देते हैं घटना.डेटा और मुख्य धागे को एक नया संदेश भेजें संदेश भेजें तरीका।

वेब कर्मचारियों के साथ समानता का लाभ उठाना

वेब वर्कर्स के लिए प्राथमिक उपयोग मामला कम्प्यूटेशनल रूप से गहन जावास्क्रिप्ट कार्यों को समानांतर में निष्पादित कर रहा है। इन कार्यों को वेब कर्मचारियों पर ऑफलोड करके, आप महत्वपूर्ण प्रदर्शन सुधार प्राप्त कर सकते हैं।

यहाँ एक भारी गणना करने के लिए वेब वर्कर का उपयोग करने का एक उदाहरण दिया गया है:

// main.js

कॉन्स्ट कार्यकर्ता = नया कार्यकर्ता('कार्यकर्ता.जेएस');

// गणना के लिए वेब वर्कर को डेटा भेजें
कार्यकर्ता पोस्ट संदेश ([1, 2, 3, 4, 5]);

// वेब वर्कर से परिणाम सुनें
कार्यकर्ता संदेश = समारोह(आयोजन) {
कॉन्स्ट परिणाम = घटना.डाटा;
सांत्वना देना।लकड़ी का लट्ठा('गणना परिणाम:', परिणाम);
};

वर्कर.जेएस:

// मुख्य थ्रेड से डेटा सुनें
स्व.संदेश = समारोह (आयोजन) {
कॉन्स्ट संख्या = घटना.डाटा;

कॉन्स्ट परिणाम = प्रदर्शन भारी गणना (संख्या);

// परिणाम को मुख्य थ्रेड पर वापस भेजें
Self.postMessage (परिणाम);
};

समारोहप्रदर्शन भारी गणना(आंकड़े) {
// संख्याओं की सरणी पर एक जटिल गणना करें
वापस करना आंकड़े
।नक्शा((संख्या) =>गणितपाउ (संख्या, 3)) // घन प्रत्येक संख्या
.फ़िल्टर((संख्या) => संख्या % 20) // सम संख्याओं को फ़िल्टर करें
।कम करना((योग, संख्या) => योग + संख्या, 0); // सभी नंबरों का योग करें
}

इस उदाहरण में, आप मुख्य थ्रेड से वेब वर्कर को संख्याओं की एक सरणी पास करते हैं। वेब वर्कर डेटा की प्रदान की गई सरणी का उपयोग करके गणना करता है और परिणाम को मुख्य थ्रेड पर वापस भेजता है। प्रदर्शन भारी गणना () फ़ंक्शन प्रत्येक संख्या को उसके घन में मैप करता है, सम संख्याओं को फ़िल्टर करता है, और अंत में उनका योग करता है।

सीमाएं और विचार

जबकि वेब वर्कर्स जावास्क्रिप्ट में समानता प्राप्त करने के लिए एक तंत्र प्रदान करते हैं, कुछ सीमाओं और विचारों पर विचार करना महत्वपूर्ण है:

  • कोई साझा मेमोरी नहीं: वेब कर्मचारी अलग-अलग थ्रेड्स में काम करते हैं और मुख्य थ्रेड के साथ मेमोरी साझा नहीं करते हैं। इसलिए, वे संदेश पास किए बिना मुख्य थ्रेड से सीधे वेरिएबल्स या ऑब्जेक्ट्स तक नहीं पहुंच सकते हैं।
  • क्रमांकन और देशीकरण: मुख्य थ्रेड और वेब वर्कर्स के बीच डेटा पास करते समय, आपको डेटा को क्रमबद्ध और डिस्क्रिअलाइज़ करने की आवश्यकता होती है क्योंकि संदेश पासिंग एक टेक्स्ट-आधारित संचार है। इस प्रक्रिया में एक प्रदर्शन लागत लगती है और यह ऐप के समग्र प्रदर्शन को प्रभावित कर सकती है।
  • ब्राउज़र समर्थन: हालांकि अधिकांश आधुनिक वेब ब्राउज़र में वेब वर्कर्स अच्छी तरह से समर्थित हैं, कुछ पुराने ब्राउज़र या सीमित वातावरण में वेब वर्कर्स के लिए आंशिक या कोई समर्थन नहीं हो सकता है।

जावास्क्रिप्ट में सही समानता प्राप्त करें

जावास्क्रिप्ट में समानता एक रोमांचक अवधारणा है जो मुख्य रूप से एकल-थ्रेडेड भाषा में भी कार्यों के वास्तविक समवर्ती निष्पादन को सक्षम बनाती है। वेब वर्कर्स की शुरुआत के साथ, आप समानता की शक्ति का दोहन कर सकते हैं और अपने जावास्क्रिप्ट अनुप्रयोगों में महत्वपूर्ण प्रदर्शन सुधार प्राप्त कर सकते हैं।