Skip to content

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!