2011-03-24 31 views
18

GWT'yi kullanarak bazı web uygulama programlaması yapıyorum ve "browser event loop" terimi ile karıştırıldım.Tarayıcı olayı döngüsü nedir?

Tarayıcı olay döngüsü tamamlandıktan sonra ertelenmiş komutları yürütmem gereken ve "bir şeyler yap" gerektiren durumlarla karşılaştım.

Tam olarak ne olduğunu ve olay döngü sürecinde ne olduğunu ve hangi sırada olduğunu bilmek ister misiniz?

+2

Benzer: http://stackoverflow.com/questions/5131086/using-the-gwt-scheduler –

cevap

18

Tarayıcı olayı, tarayıcı tarafından başlatılan ve tıpkı tıpkı olduğu gibi sürekli olarak farklı olayları tarayan ve çalıştıran bir iş parçacığıdır. Olaylar meydana geldikçe, olay kuyruğuna yerleştirilir ve sırayla bir olay dizisi tarafından çalıştırılır. Javascript'in, tamamlamak için bekleyen kendi döngülerini oluşturmaması ya da bunun gibi bir şey oluşturmaması gerekir. Bu, bir sürekli etkinlik döngüsü iş parçacığını engeller. Bunun yerine setTimeout veya setInterval gibi bir şey kullanırsınız ve beklediğiniz herhangi bir koşul olup olmadığını kontrol edin, böylece tarayıcı 'beklerken' çalışabilir.

GWT, scheduler'u kullanarak bu işlemi bir şekilde tercih edebilecek olmasından dolayı iyidir - olay döngüsü 'tamamlandıktan sonra bir şey çalıştırmak istediğiniz durumda, muhtemelen planlamayı veya programDefresi'ni kullanmak isteyeceksiniz. Olay sırasına bir kod parçası için bir işleyiciyi enjekte edecektir, böylece geçerli yürütme bağlamındaki diğer tüm kodlardan sonra çalışacaktır (geçerli yürütme içeriği == burada, her zaman geçerli JavaScript nesnesi hiyerarşisinde, pencere, nesne) çalıştırılır, ancak sıraya yerleştirilen bir sonraki olaydan önce.

+1

Ayrıca, widget'ımızın ve UI öğelerinizin eki, DOM'daki son olay olayıdır. etkinlik döngüsü tamamlandı mı? – gofeddy

+1

DOM düzenleme olayları, diğer olaylarla aynı şekilde işlenir. Her ne zaman olursa olsun, kuyruğa inecek her yerde, ateşe verilecek ilk veya son olay değildir. Ayrıca DOM ağacını da havaya uçururlar, böylece olayın tetiklendiği yerde 'yukarıdaki' ağacın herhangi bir yerinde o olaylara dinleyici olabilirsiniz. Vanilya js'deki karmaşık faktör, her tarayıcının DOM mutasyon olaylarını farklı şekilde ele almasıdır. – Ichorus

+0

GWT, birleşik bir olay işleme şeması oluşturmaya çalışmak için GWTEventSystem ile olayları yakalar. Olaylar, yukarıda özetlenen ağaç köpürme şemasını takip eder, ancak her etkinlik için, ilk olarak GWT HandlerManager'dan geçerek bu tür etkinlik için kaydedilmiş İşleyicileri arar. Birini bulursa, standart kullanım için tarayıcıya geri dönmezse, EventHandler kodunu tetikler. Tam olarak ne yapmaya çalışıyorsun? – Ichorus