SORU
8 NİSAN 2009, ÇARŞAMBA


setTimeout veya setınterval?

Söyleyebileceğim kadarıyla, javascript, bu iki parça aynı şekilde davranır:

Bir Seçenek:

function myTimeoutFunction()
{
    doStuff();
    setTimeout(myTimeoutFunction, 1000);
}

myTimeoutFunction();

B Seçeneği:

function myTimeoutFunction()
{
    doStuff();
}

myTimeoutFunction();
setInterval(myTimeoutFunction, 1000);

setTimeout setInterval kullanma arasında herhangi bir fark var mı?

CEVAP
8 NİSAN 2009, ÇARŞAMBA


Herhangi bir fark var mı?

Evet. Bir zaman Aşımı setTimeout sonra belirli bir süre yürütür (); aradan önceki zaman aralığı kovduktan sonra belirli bir süre çalıştırır.

Senin doStuff eğer farkı göreceksiniz() işlevi, bir süre çalıştırılabilir. Örneğin, temsil ettiğimiz bir çağrı setTimeout/setınterval ile ., ateşleme zaman aşımı/zaman aralığı ile * ve JavaScript kodu icra ile [-----], zaman çizelgeleri gibi:

Timeout:

.    *  .    *  .    *  .    *  .
     [--]    [--]    [--]    [--]

Interval:

.    *    *    *    *    *    *
     [--] [--] [--] [--] [--] [--]

Bir sonraki komplikasyon Aralık yangınları buna rağmen bir JavaScript zaten bir önceki aralığı işleme gibi) yapmakla meşgul olmasıdır. Bu durumda, Aralık hatırlanır ve önceki işleyicisi ve tarayıcı kontrol bitirir döner dönmez olur. Bir doStuff için örneğin() bu yüzden bazen kısa bir işlem ([-]) ve bazen uzun ([-----]):

.    *    *    •    *    •    *    *
     [-]  [-----][-][-----][-][-]  [-]

• kendi kodunu hemen çalıştırmaz o zaman aralığında bir ateş temsil eder ve onun yerine bekleyen yapıldı.

Aralıklarla ‘’ programa geri almak için. yakalamak için deneyin Ama üst üste bir sıra yok: sadece tek bir yürütme aralığı başına. beklemede olabilir Eğer onlar kadar sıraya (tarayıcı bir genişleyen olağanüstü bir infaz listesi ile sol olurdu!)

.    *    •    •    x    •    •    x
     [------][------][------][------]

x çalıştırmak veya bekleyen yapılmış olamazdı bir aralık ateş temsil eder, yani yerine atıldı.

Senin doStuff() işlevi alışkanlıkla tarayıcı 0 CPU bu hizmet için çalışıyor yemek ve daha az duyarlı hale gelebilir yürütmek için daha uzun süre için ayarlanmış zaman aralığından alır.

Ve neden kullanıyorsunuz?

Zincirli-zaman Aşımı verir garantili yuvası serbest zaman tarayıcı; Aralığı çalışır sağlamak görevidir çalışan yürütür, mümkün olduğunca yakın onun zamanlanmış zamanlarda, karşılığında tarayıcı UI kullanılabilirlik.

Ben düşünün bir zaman aralığı için tek animasyonlar olmak istediğim gibi pürüzsüz olarak mümkün, buna rağmen zincirleme zaman aşımı daha kibar devam eden animasyonlar sürer her an iken sayfası yüklenir. Daha az zorlu kullanımlar için (önemsiz Güncelleyici bir ateş her 30 saniyede falan gibi güvenle kullanabilirsiniz.

Tarayıcı uyumluluk açısından, setTimeout setınterval öncedir, ama tüm tarayıcılar desteği bugün de bir araya gelecek. Yıllardır son avare WinMo IE Mobil <6.5, ama umarım o da artık geride kaldı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amir Parmar

    Amir Parmar

    25 Kasım 2010
  • Carlos Delgado

    Carlos Delga

    21 HAZİRAN 2011
  • InsideBlackBerry

    InsideBlackB

    14 Aralık 2009