🚀 HTML Web Workers: Arka Planda Güçlü Hesaplamalar

JavaScript'in tek iş parçacıklı (single-threaded) yapısını aşarak, kullanıcı arayüzünü dondurmadan ağır işlemleri arka planda yürütme sanatı.

JavaScript'in 'Donma' Sorunu ve Çözümü

Selamlar. JavaScript doğası gereği single-threaded (tek iş parçacıklı) bir dildir. Yani aynı anda sadece bir iş yapabilir. Eğer tarayıcıda milyonlarca satırlık bir veriyi işlemeye veya çok karmaşık bir matematiksel hesaplama yapmaya kalkarsanız, tarayıcının 'Main Thread' dediğimiz ana kanalı meşgul olur. Bu da ne anlama gelir? Kullanıcı butona basamaz, animasyonlar durur, sayfa 'Yanıt Vermiyor' hatasına düşer.

İşte Web Workers API, bize tarayıcı içerisinde ana sayfadan bağımsız çalışabilen 'yardımcı işçiler' oluşturma şansı tanır. Bu işçiler arka planda kendi dosyalarında çalışır, işlerini bitirir ve sonucu ana sayfaya raporlarlar.

Biz genelde İçimizdeki Savaş gibi 3D aksiyon oyunlarımızda, sahnedeki onlarca objenin karmaşık mesafe kontrollerini veya bazı yapay zeka rota hesaplamalarını ana render döngüsünü yormamak için Web Worker'lara paslıyoruz. Bu sayede ekran tazeleme hızı (FPS) düşmeden arka planda ağır matematik dönebiliyor.

Web Worker Nasıl Çalışır?

Web Worker'lar ana script dosyanızdan ayrı bir .js dosyası olarak yaşarlar. Aradaki iletişim ise bir 'mesajlaşma' sistemiyle kurulur:

  1. Ana Sayfa: new Worker('worker.js') ile işçiyi çağırır.
  2. Mesaj Gönderme: postMessage() fonksiyonu ile işçiye veri gönderilir.
  3. Mesaj Alma: onmessage olayı ile işçiden gelen sonuçlar dinlenir.

Önemli Kısıtlama: Web Worker'ların DOM erişimi yoktur. Yani bir worker içerisinden document.getElementById diyemezsiniz. Onların işi sadece veri işleyip geri göndermektir. Görsel güncellemeyi her zaman ana script (Main Thread) yapmalıdır.

🚀 Sanal Kodlama Alanı Yükleniyor...

Ne Zaman Kullanmalı?

  • Büyük Veri İşleme: Binlerce satırlık JSON verisini filtrelemek veya sıralamak.
  • Görüntü/Video İşleme: Canvas üzerindeki pikselleri tek tek analiz etmek.
  • Kriptografi: Şifreleme veya hashleme işlemleri.
  • Oyun Mantığı: Pathfinding (yol bulma) algoritmaları veya fizik motoru güncellemeleri.

Dikkat: Her şeyi Worker'a atmayın! Worker başlatmak ve veri transferi yapmak (serialization) bir maliyettir. Sadece gerçekten 'milisaniyeler' sürecek ve UI'ı etkileyecek işleri oraya taşımak en mantıklı yoldur. İş bittiğinde worker.terminate() ile işçiyi tamamen kapatarak kaynak tüketimini de önleyebilirsiniz.


Teknik Kaynak: ovidgame.com