इवेंट लूप
Node.js में इवेंट लूप (Event Loop) एक ऐसा मूलभूत घटक है जो असिंक्रोनस और नॉन-ब्लॉकिंग कोड के निष्पादन को सक्षम बनाता है। यह सिंगल-थ्रेडेड वातावरण में I/O ऑपरेशन्स, नेटवर्क कॉल और टाइमर को कुशलतापूर्वक संभालता है, जिससे सर्वर अनुप्रयोगों की परफॉर्मेंस और स्केलेबिलिटी बढ़ती है। इवेंट लूप का सही समझना आवश्यक है ताकि हम ब्लॉकिंग कोड से बचें, एप्लिकेशन की प्रतिक्रिया समय सुनिश्चित करें और सिस्टम संसाधनों का अधिकतम उपयोग कर सकें।
Node.js डेवलपमेंट में इवेंट लूप का उपयोग तब किया जाता है जब हमें फ़ाइल सिस्टम ऑपरेशन्स, डेटाबेस क्वेरी, HTTP रिक्वेस्ट या टाइमर जैसी असिंक्रोनस गतिविधियों को मैनेज करना होता है। इसके लिए डेवलपर को Node.js की सिंटैक्स, डेटा स्ट्रक्चर (जैसे Arrays और Queues), असिंक्रोनस एल्गोरिदम और OOP प्रिंसिपल्स में प्रवीण होना चाहिए। इस ट्यूटोरियल के अंत तक पाठक इवेंट लूप में इवेंट रजिस्टर करना, टाइमर और माइक्रोटास्क का उपयोग करना और कॉलबैक के निष्पादन क्रम को समझना सीखेंगे।
इसको समझने के बाद, डेवलपर स्थिर, स्केलेबल एप्लिकेशन बना सकेंगे, एरर को सही ढंग से हैंडल कर सकेंगे और सामान्य समस्याओं जैसे मेमोरी लीक्स, इफिशिएंट न होने वाले एल्गोरिदम और गलत इवेंट मैनेजमेंट से बच सकेंगे। इवेंट लूप की समझ Node.js प्रोग्रामिंग और सिस्टम आर्किटेक्चर दोनों के लिए महत्वपूर्ण है।
मूल उदाहरण
textconst EventEmitter = require('events');
class MeraEmitter extends EventEmitter {}
const meraEmitter = new MeraEmitter();
// इवेंट लिस्नर रजिस्टर करना
meraEmitter.on('greet', (name) => {
console.log(`नमस्ते, ${name}!`);
});
// इवेंट ट्रिगर करना
meraEmitter.emit('greet', 'अंजलि');
console.log('इवेंट ट्रिगर हो चुका है!');
इस उदाहरण में MeraEmitter क्लास को EventEmitter से एक्सटेंड किया गया है। EventEmitter हमें इवेंट रजिस्टर और इवेंट ट्रिगर करने की सुविधा देता है। meraEmitter.on('greet', callback) एक लिस्नर रजिस्टर करता है जो 'greet' इवेंट के ट्रिगर होने पर execute होगा। meraEmitter.emit('greet', 'अंजलि') से कॉलबैक execute होता है और कंसोल में संदेश दिखाई देता है।
यह उदाहरण दिखाता है कि Node.js इवेंट को रजिस्टर करने और उसे execute करने के बीच का अंतर कैसे संभालता है, जो असिंक्रोनस नॉन-ब्लॉकिंग प्रोसेसिंग को सक्षम बनाता है। console.log('इवेंट ट्रिगर हो चुका है!') तुरंत execute होता है जबकि इवेंट अलग से प्रोसेस होता है। यह beginners के लिए अक्सर भ्रमित करने वाला हिस्सा है।
व्यावहारिक उदाहरण
textconst EventEmitter = require('events');
class TaskQueue extends EventEmitter {
constructor() {
super();
this.tasks = [];
}
addTask(task) {
this.tasks.push(task);
this.emit('taskAdded');
}
processTasks() {
this.on('taskAdded', () => {
while (this.tasks.length > 0) {
const currentTask = this.tasks.shift();
try {
currentTask();
} catch (err) {
console.error('टास्क में त्रुटि:', err);
}
}
});
}
}
const queue = new TaskQueue();
queue.processTasks();
queue.addTask(() => console.log('टास्क 1 पूर्ण हुआ'));
queue.addTask(() => console.log('टास्क 2 पूर्ण हुआ'));
इस उदाहरण में TaskQueue क्लास बनाई गई है जो FIFO (First In First Out) आधार पर असाइनमेंट्स को प्रोसेस करती है। जब कोई टास्क addTask() के माध्यम से जोड़ता है, तो 'taskAdded' इवेंट ट्रिगर होता है। processTasks() सभी लंबित टास्क को sequentially execute करता है।
try/catch ब्लॉक यह सुनिश्चित करता है कि किसी टास्क में एरर आने पर Event Loop ब्लॉक न हो। यह पैटर्न वास्तविक जीवन में बैकग्राउंड जॉब, HTTP रिक्वेस्ट प्रोसेसिंग या बैच प्रोसेसिंग के लिए उपयोगी है। OOP और Event Loop का संयोजन modular, maintainable और scalable Node.js एप्लिकेशन बनाता है।
इवेंट लूप के लिए best practices में Event Listener का सही प्रबंधन शामिल है ताकि मेमोरी लीक्स से बचा जा सके, असिंक्रोनस कॉलबैक में उचित एरर हैंडलिंग और डेटा स्ट्रक्चर एवं एल्गोरिदम की optimization शामिल है। सामान्य गलतियाँ हैं: Event Loop को ब्लॉक करने वाला synchronous कोड, unhandled exceptions, और ज्यादा listeners का registration।
📊 संदर्भ तालिका
Node.js Element/Concept | Description | Usage Example |
---|---|---|
EventEmitter | असिंक्रोनस इवेंट मैनेजमेंट के लिए मूल क्लास | const emitter = new EventEmitter(); emitter.on('event', () => {}); |
.emit | इवेंट को ट्रिगर करना और लिस्नर्स execute करना | emitter.emit('event'); |
.on | इवेंट लिस्नर रजिस्टर करना | emitter.on('event', callback); |
process.nextTick | करंट साइकिल के अंत में फ़ंक्शन execute करना | process.nextTick(() => console.log('Microtask')); |
setImmediate | नेक्स्ट Event Loop साइकिल में फ़ंक्शन execute करना | setImmediate(() => console.log('Next cycle')); |
Array Queue | टास्क मैनेजमेंट के लिए डेटा स्ट्रक्चर | tasks.push(task); tasks.shift(); |
इवेंट लूप की समझ से डेवलपर असिंक्रोनस ऑपरेशन्स को कुशलतापूर्वक मैनेज कर सकते हैं, Event Listener और एरर हैंडलिंग सही ढंग से लागू कर सकते हैं और performative प्रोसेसिंग सुनिश्चित कर सकते हैं। अगले कदमों में advanced asynchronous patterns जैसे Promises, async/await, Streams और Worker Threads शामिल हैं। इन अवधारणाओं का प्रयोग API handling, batch processing और real-time data streams में performance और reliability बढ़ाता है। आधिकारिक Node.js डॉक्यूमेंटेशन और performance guides लगातार मददगार संसाधन प्रदान करते हैं।
🧠 अपने ज्ञान की परीक्षा करें
अपने ज्ञान की परीक्षा करें
इस इंटरैक्टिव क्विज़ के साथ अपनी चुनौती लें और देखें कि आप विषय को कितनी अच्छी तरह समझते हैं
📝 निर्देश
- हर प्रश्न को ध्यान से पढ़ें
- हर प्रश्न के लिए सबसे अच्छा उत्तर चुनें
- आप जितनी बार चाहें क्विज़ दोबारा दे सकते हैं
- आपकी प्रगति शीर्ष पर दिखाई जाएगी