🔍 inp.works

Zorlanmış senkron layout: DOM'a yazdıktan sonra geometri okumak

Ne oluyor

Normalde layout, JavaScript'iniz bittikten sonra, kare başına bir kez gerçekleşir. Ama DOM'u değiştirip hemen ardından bir layout özelliği — offsetWidth, scrollHeight, getBoundingClientRect(), getComputedStyle() — okursanız, cevap bekleyen değişikliğinize bağlı olduğu için tarayıcı durmak ve layout'u tam orada, senkron olarak, görevinizin içinde hesaplamak zorundadır.

Bir zorlanmış layout küçük bir sayfada ucuzdur. Büyük bir DOM'da ya da bir döngüde tekrarlandığında (ki bu layout thrashing'e dönüşür) işleyiciye yüzlerce milisaniye ekler.

Nasıl tanınır

Nasıl düzeltilir

Sorun

grid.style.width = next + "px"            // write: layout is now dirty
const rect = cell.getBoundingClientRect()  // read → forced synchronous layout

Çözüm

const rect = cell.getBoundingClientRect()  // read first, layout is clean
grid.style.width = next + "px"             // write after; browser lays out
                                           // once, before the next paint
Sitenizi ücretsiz tarayın →
Advertise here