HTML5 Web Workers

JavaScript komutlarının uzun süre almasından kaynaklanan sorunu çözmek için geliştirilen Web Workers ile ilgili bilgiler ve örnek yer alıyor.

Web Workers nedir

Web Workers JavaScript komutlarının arka planda çalışmasını sağlar.

Web Workers arka planda JavaScript komutlarını çalıştırırken kullanıcı sitede dolaşmaya devam edebilir.

Web Workers kullanmadan önce tarayıcı desteğini kontrol etmeyi unutmayın!

if (typeof (Worker) !== "undefined") {
  // Web workers işlemleri
} else {
  alert("Tarayıcınız Web Workers API desteklemiyor.");
}

Oluşturma

JavaScript komutlarının olduğu harici bir dosya oluşturalım.

Oluşturduğumuz dosyaya script.js ismini verelim ve içeriğine aşağıdaki komutları yazalım.

var sayi = 0;

function sayiArttir() {
  sayi = sayi + 1;
  postMessage(sayi);
  setTimeout("sayiArttir()", 500);
}

sayiArttir();

Komut içerisindeki postMessage metodu sayfaya veri göndermek için kullanılır.

Web Workers API fazla CPU kullanan komutlar için kullanılır.

Örnek olması amacıyla basit komutlar kullanılmıştır.

Çalıştırma

Web Workers oluşturduktan çalıştırmamız gerekir.

Komut önceden tanımlamış bir Web Workers olup olmadığını denetler ve eğer tanımlanmamışsa tanımlar.

if (typeof (w) == "undefined") {
  w = new Worker("script.js");
}

Nesne oluştuktan sonra postMessage ile gönderilen verilerin alınması gerekir.

Web Workers nesnesinin onMessage özelliği ile gelen sonuçlar alınır.

w.onmessage = function (o) {
  document.getElementById("sonuc").innerHTML = o.data;
}

Web Workers komut sonuçlarını almaya başlar.

Aldığı sonuçları parametrenin data özelliğinde saklar.

Sonlandırma

Web Workers başladıktan sonra harici dosyadaki komut çalışmasını durdursa bile bilgi almaya devam eder.

Web Workers işlemi terminate metodunu ile sonlandırılır.

w.terminate();

Yeniden kullanmak

Web Workers nesnesini yeniden kullanmak için ilk olarak Web Workers işlemini sonlandırmalı, daha sonra Web Workers değişken değeri undefined yapılmalıdır.

w = undefined;

Web workers örneği

<p>Sayı : <output id="sonuc"></output></p>
<button onclick="calistir()">Web Workers çalıştır</button>
<button onclick="durdur()">Web Workers durdur</button>

<script>
var w;

function calistir() {
  if (typeof (Worker) !== "undefined") {
    if (typeof (w) == "undefined") {
      w = new Worker("script.js");
    }

    w.onmessage = function (o) {
      document.getElementById("sonuc").innerHTML = o.data;
    }

  } else {
    alert("Tarayıcınız Web Workers API desteklemiyor.");
  }
}

function durdur() {
  w.terminate();
  w = undefined;
}
</script>
var sayi = 0;

function sayiArttir() {
  sayi = sayi + 1;
  postMessage(sayi);
  setTimeout("sayiArttir()", 500);
}

sayiArttir();

Web Workers erişim

Web Workers harici dosyada işlem yaptığından aşağıdaki nesnelere erişemeyecektir.

  • window nesnesi
  • document nesnesi
  • parent nesnesi

Örnek kodları incelemek için tıklayın.

HTML5 Derslerine buradan ulaşabilirsiniz…

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!