DOM'da yapabileceğiniz çoğu değişiklik gibi innerHTML'yi ayarlamak da eşzamanlıdır. Ancak, web sayfasını oluşturmak farklı bir hikaye.
(Unutmayın, DOM "Belge Nesne Modeli" anlamına gelir. Bu yalnızca bir "model", verilerin bir temsilidir. Kullanıcının ekranında gördüğü şey, modelin nasıl görünmesi gerektiğinin bir resmidir. Dolayısıyla, modeli değiştirmek anında olmaz resmi değiştirin - güncellenmesi biraz zaman alabilir.)
JavaScript'i çalıştırmak ve web sayfasını oluşturmak aslında ayrı ayrı gerçekleşir. (Etkinlik döngüden - check out sayfa pistlerinde her şeyden önce JavaScript, basitçe söylemek gerekirse bu mükemmel videoyu daha fazla ayrıntı için) ve daha sonra sonra tarayıcı kullanıcı görmek için web sayfasının herhangi bir değişiklik hale söyledi. Bu nedenle "engelleme" bu kadar önemli bir konudur - hesaplama açısından yoğun kod çalıştırmak, tarayıcının "JS çalıştır" adımını geçip "sayfayı oluştur" adımına geçmesini engeller, bu da sayfanın donmasına veya takılmasına neden olur.
Chrome'un ardışık düzeni şuna benzer:
Gördüğünüz gibi, tüm JavaScript önce gerçekleşir. Ardından sayfa şekillendirilir, düzenlenir, boyanır ve birleştirilir - "oluşturma". Bu ardışık düzenin tümü her çerçeveyi yürütmez. Varsa, hangi sayfa öğelerinin değiştiğine ve nasıl yeniden işlenmeleri gerektiğine bağlıdır.
Not: alert()
aynı zamanda eşzamanlıdır ve JavaScript adımı sırasında yürütülür; bu nedenle, web sayfasındaki değişiklikleri görmeden önce uyarı iletişim kutusu görüntülenir.
Şimdi "Bekleyin, ardışık düzen içindeki o 'JavaScript' adımında tam olarak ne çalıştırılıyor? Tüm kodum saniyede 60 kez çalışıyor mu?" Cevap "hayır" dır ve JS olay döngüsünün nasıl çalıştığına geri döner. JS kodu yalnızca yığın içindeyse çalışır - olay dinleyicileri, zaman aşımları gibi şeylerden. Önceki videoya bakın (gerçekten).
https://developers.google.com/web/fundamentals/performance/rendering/