1. Asenkron Sıralama (Async Hooks): Asenkron İşlemleri İzleme
Async Hooks, özellikle hata ayıklama ve performans izleme açısından oldukça faydalıdır. Bu özellik ile, asenkron işlemlerin ne zaman başladığını, ne zaman bittiğini ve hangi işlemde takıldığını kolayca takip edebilirsiniz.
Örneğin, aşağıdaki gibi bir kod ile async hooks kullanabilirsiniz:
const async_hooks = require('async_hooks');
const hook = async_hooks.createHook({
init(asyncId, type, triggerAsyncId, resource) {
console.log(`Async operation of type ${type} initialized`);
},
destroy(asyncId) {
console.log(`Async operation destroyed`);
}
});
hook.enable();
Bu şekilde, asenkron operasyonların hangi aşamalarda olduğunu gözlemleyebilirsiniz.
2. Cluster Modülü ile Yük Dengeleme: Çok Çekirdekli Sistemlerde Verimlilik
Cluster Modülü, uygulamanızın birden fazla işlemci çekirdeği kullanarak daha hızlı çalışmasını sağlar. Çok çekirdekli sistemlerde, Node.js uygulamanızı paralel olarak çalıştırarak her çekirdeği daha verimli kullanabilirsiniz.
Aşağıdaki örnek ile cluster modülünü nasıl kullanabileceğinizi görebilirsiniz:
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello, Node.js!');
}).listen(8000);
}
Bu basit kod ile her CPU çekirdeği için bir işçi oluşturmuş olursunuz, böylece uygulamanızın performansını artırırsınız.
3. Event Loop Derinliklerine İniş: Node.js’in Kalbini Anlamak
Event Loop’un nasıl çalıştığını anlamak, daha verimli ve hızlı Node.js uygulamaları yazmanıza yardımcı olabilir. Kısaca özetlemek gerekirse, Event Loop şu adımlarla çalışır:
1. Timers: Zamanlayıcılar (setTimeout, setInterval) çalıştırılır.
2. I/O Callbacks: I/O işlemleri tamamlanır (dosya okuma, ağ talepleri vb.)
3. Idle, Prepare: Hazırlık aşaması, henüz çalıştırılacak bir şey yoksa bu aşama geçilir.
4. Poll: Giriş/Çıkış olaylarını kontrol eder.
5. Check: Gerçekleştirilecek işler kontrol edilir.
Event Loop’un her adımında ne olup bittiğini inceleyerek, asenkron işlemlerinizin daha verimli çalışmasını sağlayabilirsiniz.
4. Stream ve Buffer’larla Performans Optimizasyonu
Örneğin, bir dosyayı Stream kullanarak okuma işlemi şu şekilde yapılabilir:
const fs = require('fs');
const readableStream = fs.createReadStream('largeFile.txt');
readableStream.on('data', (chunk) => {
console.log(`Received ${chunk.length} bytes of data.`);
});
Bu sayede dosya tüm içeriğini belleğe yüklemek yerine, parça parça işlenir, böylece hafıza kullanımını minimize edersiniz.
5. Node.js ile Gerçek Zamanlı Uygulamalar: WebSockets ile Hızlı İletişim
Aşağıdaki basit WebSocket örneği ile, istemciden sunucuya veri iletimi gerçekleştirebilirsiniz:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', (ws) => {
ws.on('message', (message) => {
console.log(`Received message: ${message}`);
});
ws.send('Hello from server');
});
WebSockets, özellikle sohbet uygulamaları, canlı skorlar veya anlık bildirimler gibi gerçek zamanlı veri iletimine ihtiyaç duyan projelerde oldukça faydalıdır.