05 Advanced Patterns
Basics sabko aate hain, lekin interview aur high-performance apps ke liye ye Advanced Concepts zaroori hain.
1. Streams & Buffers (Handling Big Data) π
Agar aapko 1GB ki file read karni hai, aur aap fs.readFile use karte hain, to Node.js poori file memory (RAM) me load karega.
Problem: RAM full ho jayegi aur app crash ho sakta hai!
Solution: Streams.
Streams data ko βChunksβ (tukdon) me process karte hain. Jaise YouTube video poora download nahi hota, buffer hota rehta hai, waise hi.
Example: Reading Big File
const fs = require('fs');
// Stream banaya (Tukdon me padhega)const readStream = fs.createReadStream('big-video.mp4');
readStream.on('data', (chunk) => { console.log(`Received ${chunk.length} bytes of data.`);});
readStream.on('end', () => { console.log('Finished reading file.');});Pipe (Sabse Aasaan Tareeka)
Ek stream se data le kar seedha doosre me daalna.
// File copy karna (Memory efficient way)const readStream = fs.createReadStream('input.txt');const writeStream = fs.createWriteStream('output.txt');
readStream.pipe(writeStream); // Magic! β¨2. Worker Threads (Multithreading) π§΅
Humne padha tha ki Node.js Single Threaded hai. To agar koi heavy calculation (jaise Video Processing) karni ho to kya karein? Main thread to block ho jayega!
Solution: Worker Threads. Ye humein naye threads banane ki permission deta hai jo parallel me kaam karte hain.
const { Worker, isMainThread, parentPort } = require('worker_threads');
if (isMainThread) { // Ye Main Thread hai const worker = new Worker(__filename);
worker.on('message', (msg) => { console.log('Worker se msg aaya:', msg); });
console.log("Main thread free hai!");
} else { // Ye Worker Thread hai (Heavy kaam yahan karein) // Maano yahan humne 1 Billion numbers count kiye let count = 0; for (let i = 0; i < 1000000000; i++) { count++; }
parentPort.postMessage(`Count complete: ${count}`);}3. Clustering (Scaling) π
Node.js default me sirf 1 CPU core use karta hai, bhale hi aapke laptop me 8 cores hon. Clustering ka use karke hum har Core par ek Node.js server chala sakte hain.
const cluster = require('cluster');const http = require('http');const os = require('os');
if (cluster.isPrimary) { // Master process: Workers create karega const numCPUs = os.cpus().length; console.log(`Master setup kar raha hai ${numCPUs} workers...`);
for (let i = 0; i < numCPUs; i++) { cluster.fork(); // Naya worker banaya }
} else { // Worker process: Server chalayega http.createServer((req, res) => { res.writeHead(200); res.end('Hello World form Worker ' + process.pid); }).listen(8000);}4. Memory Leaks (Yaad Rakhein) π§
Agar aapka app dheere-dheere slow ho raha hai aur crash ho raha hai, to shayad Memory Leak hai. Common Causes:
- Global Variables: Jo kabhi garbage collect nahi hote.
- Unclosed Connections: Database connection open chhod dena.
- Events Listeners:
on('event')lagana par remove na karna.
Fix: Hamesha listeners remove karein (removeListener) aur connections close karein.
Summary
- Streams: Badi files ko bina RAM bhare handle karne ke liye.
- Worker Threads: CPU intensive kaam (Looping, Parsing) ke liye.
- Clustering: Multi-core processor ka poora faida uthane ke liye.
π Mubarak ho! Aapne Node.js ka basic se lekar advanced safar poora kar liya hai. Ab projects banayein aur seekhte rahein!