Middle
JavaScript'te Web Worker akışını nasıl oluşturursunuz?
sobes.tech yapay zeka
AI'dan gelen yanıt
JavaScript'te bir Web Worker akışını Worker yapısı kullanılarak oluşturabilirsiniz.
// Yeni bir Web Worker oluşturuyoruz ve JS dosyasının yolunu veriyoruz,
// bu dosya ayrı bir akışta çalışacaktır.
const worker = new Worker('worker.js');
worker.js dosyasında (veya worker oluşturulurken belirtilen herhangi bir dosyada) kod ayrı bir akışta çalışacaktır.
// worker.js
// Ana akıştan gönderilen mesajların işlenmesi
self.onmessage = function(event) {
const receivedData = event.data;
console.log('Ana akıştan alınan mesaj:', receivedData);
// Mesajı geri ana akışa gönder
const responseData = { message: 'Worker’dan Merhaba!', data: receivedData };
self.postMessage(responseData);
};
// İsteğe bağlı olarak, hata işlemi eklenebilir
self.onerror = function(error) {
console.error('Worker hatası:', error);
};
Ana akışta (worker oluşturulduğu yerde), worker ile etkileşim kurabilirsiniz:
// main.js
const worker = new Worker('worker.js');
// Web Worker’a mesaj gönder
worker.postMessage({ command: 'start', payload: 'some data' });
// Web Worker’dan alınan mesajları işleme
worker.onmessage = function(event) {
const receivedData = event.data;
console.log('Worker’dan alınan mesaj:', receivedData);
};
// Web Worker hatalarını yakalama
worker.onerror = function(error) {
console.error('Ana akışta Worker hatası:', error);
};
// Web Worker’ı sonlandırma (isteğe bağlı)
// worker.terminate();
Anahtar noktalar:
- İletişim: Ana akış ile worker arasındaki veri alışverişi
postMessage()veonmessagemetodlarıyla mesajlar aracılığıyla gerçekleşir. - Kısıtlamalar: Worker’lar DOM’a,
windownesnesine ve tarayıcıdaki diğer küresel nesnelere erişemezler. Sınırlı erişimleri vardırnavigator,location,XMLHttpRequest,setTimeout,setInterval,fetch,WebSocketsve diğerlerine. - İzolasyon: Worker içindeki kod, ana akışın engellenmesini önler ve performansı artırır, özellikle kaynak yoğun hesaplamalar sırasında, ayrı bir akışta çalışır.