Your Ad Here

Javascript Yazılım Kuralları (JS)

3 Aralık 2007

Zaman gecikmesi yaratma

Javascript ile zaman gecikmesi yaratmanın iki yolu vardır. Birincisi çok basittir ve belirtilen zaman süresi kadar bekledikten sonra işlevi çalıştırır. İkincisi de aynı işi yapar ama burada işlev yine çalıştırılır.

Birçok tarayıcıda en az gecikme süresi 25 ve 75 ms olur. Eğer daha kısa gecikme (bekleme) süresi verilirse, gerçek bekleme süresi en az gecikme süresi kadar olur. Daha büyük sayılarda bile gecikme hiçbir zaman tam olmaz. Pek çok tarayıcıda süre her zaman sizin istediğinizden daha uzun olur (birkaç milisaniye hata payı ile). Bazıları hatalarını zaman içinde zaman sayacıyla giderebilir. Unutmayın ki birçok zaman sayacını kısa gecikmelerle aynı sayfada kurmak tarayıcının yavaşmalasına hatta hiç yanıt vermemesine neden olabilir.

Bekleme Süresi belirleme (setTimeout)

İlk yöntem setTimeout() denen bir pencere yöntemidir. Bu yöntem belirtilen süre kadar bekledikten sonra kodu çalıştırır. Kod doğrudan bir işleve erişimdir, ya da bir yazı dizgisi olup kaynak kod içerirmişcesine çalıştırılır.
window.setTimeout(referenceToFunction,timeInMilliseconds);

window.setTimeout('runMoreCode()',timeInMilliseconds);
Eğer uygunsa doğrudan işleve erişim kullanılmalıdır. Ama yazı dizisi biçimde olunca tarayıcının yeni bir kodlama ortamı yaratıp kodlamayı çalıştırması gerekir ki hız açısından çok kullanışlı olmaz.

Eğer bir zaman sayacı yaratırsanız, setTimeout (çağıran kodun arkasındaki yazılım) çalışmaya devam eder. Belirtilen gecikme süresinden sonra zaman sayacı yeni bir çalışma ortamı oluşturur (thread gibi) setTimeout ile belirtilen işlev ya da kod bu ortamdan çalıştırılır. Aynı zamanda diğer kod ilk ortamda çalışmaya devam eder. Javascript dilinde bunu kontrol edecek komutlar yoktur. Yorumlayıcı bunları denetler ve sayfadaki kodlamayla zaman sayacıyla başlayan diğer kodun aynı anda çalıştığı varsayılır. Aynı şey olaylar için de geçerlidir. Kendi çalışma ortamlarında bulunurlar ve herhangi bir zamanda uyarılırlar.

Zaman aşımına parametre geçirirken iki kalıbı da kullanabilirsiniz. Bir yazı dizisi kullanırken içindeki kodun kırılmayacak biçimde olması, tırnakları içermemesi gibi birçok sakıncaları olduğu dikkate alınmalıdır. Eğer uygunsa bu kalıp pek kullanılmamalıdır.
window.setTimeout('runMoreCode(\''+someString+'\','+someNumber+')',10);
Doğrudan işlev erişimi yöntemi çok daha kolaydır. Burada işleve parametreler de geçirebilirsiniz. Daha kolay olmasına ek olarak her tür değişkeni kabul edebilir. Mozilla Gecko makinası kullanan tarayıcılarda (Firefox ve Netscape 6+) dikkat etmek gerekir. Çünkü onlar işleve ek parametreler de gönderirler (milisaniye hataları sayısı gibi).
window.setTimeout(function (a,b) {
  //a ve b ile birşeyler yap
},10,someString,someObject);
İşleve geçirilen değişkenler yöntemin çağrıldığı zamanki değerlerle geçer. Örneğin myVar adlı bir değişkeniniz olduğunda değeri 5 iken timeout işlemini çağırırsanız ve myVar değişkenini parametre olarak geçirdiğinizde bekleme süresini de 1 saniye yaparsanız ve hemen sonra değişkenin değerini 7 yaparsanız, işlevi ilk değer olan 5 ile gerçekleştirir.

Zaman Aralığı belirleme (setInterval)

'setInternval' yöntemi yazım kuralları açısından setTimeout() ile aynıdır. Farklılık bekleme süresinden sonra çalıştırmanın dışında aynı bekleme süresiyle yeniden ateşlenir ve durduruluncaya dek bu işlemi yapar.
window.setInterval(function (a,b) {
  //a ve b ile birşeyler yap
},10,someString,someObject);

Zaman aşımını (bekleme süresi, timeout) ve Zaman aralığı (Interval) temizleme

Temizlemek için clearTimeout ya da clearInterval kullanmak yeterlidir.
var myInterval = window.setInterval(function (a,b) {
  myNumber++;
},1000);
window.setTimeout(function (a,b) {
  clearInterval(myInterval);
},3500);
Burada 'Interval' için gösterilenleri aynı biçimde 'timeout' için de yapabilirsiniz.