Giriş işleyicilerinizi birden fazla kez tekrar açın

Giriş işleyicileri, karelerin tamamlanmasını engelleyebileceği ve ek ve gereksiz düzen çalışmasına neden olabileceği için uygulamalarınızdaki performans sorunlarının olası bir nedenidir.

Paul Lewis

Giriş işleyicileri, karelerin tamamlanmasını engelleyebileceği ve ek ve gereksiz düzen çalışmasına neden olabileceği için uygulamalarınızdaki performans sorunlarının olası bir nedenidir.

Özet

  • Uzun süre çalışan giriş işleyicilerden kaçının. Bunlar kaydırmayı engelleyebilir.
  • Giriş işleyicilerinde stil değişiklikleri yapmayın.
  • İşleyicilerinizin gecikmesini kaldırın; etkinlik değerlerini saklayın ve bir sonraki requestAnimationFrame geri çağırma işlevinde stil değişiklikleriyle ilgilenin.

Uzun süre çalışan giriş işleyicilerden kaçının

Mümkün olan en hızlı durumda, kullanıcı sayfayla etkileşimde bulunduğunda sayfanın derleyici iş parçacığı, kullanıcının dokunma girişini alıp içeriği kolayca taşıyabilir. Bu işlem için ana iş parçacığının (JavaScript, düzen, stiller veya boyamanın yapıldığı) çalışması gerekmez.

Hafif kaydırma; yalnızca derleyici.

Ancak touchstart, touchmove veya touchend gibi bir giriş işleyici eklerseniz preventDefault()'ı çağırıp dokunma kaydırma işlemini durdurmayı seçebileceğiniz için, birleştirici iş parçacığı bu işleyicinin yürütülmesinin tamamlanmasını beklemelidir. preventDefault() çağrısı yapmasanız bile, derleyicinin beklemesi gerekir. Bu nedenle, kullanıcının kaydırma işlemi engellenir. Bu da takılmalara ve atlanan karelere neden olabilir.

Yoğun kaydırma; JavaScript'de kompozitör engellendi.

Özetle, çalıştırdığınız tüm giriş işleyicilerinin hızlı bir şekilde yürütüldüğünden ve birleştiricinin işini yapmasına izin verdiğinden emin olmanız gerekir.

Giriş işleyicilerinde stil değişikliklerinden kaçının

Kaydırma ve dokunma gibi giriş işleyicileri, requestAnimationFrame geri çağırmalarından hemen önce çalışacak şekilde planlanır.

Bu işleyicilerden birinde görsel bir değişiklik yaparsanız requestAnimationFrame'ün başında bekleyen stil değişiklikleri olur. Ardından requestAnimationFrame geri çağırma işlevinin başında görsel özellikleri okursanız "Büyük, karmaşık düzenlerden ve düzen karmaşasından kaçının" başlıklı makalede de belirtildiği gibi zorunlu senkronize bir düzen tetiklersiniz.

Yoğun kaydırma; JavaScript'de kompozitör engellendi.

Kaydırma işleyicilerinizin gecikmesini kaldırma

Yukarıdaki sorunların her ikisinin de çözümü aynıdır: Görsel değişiklikleri her zaman bir sonraki requestAnimationFrame geri çağırma işlevinde debounce etmeniz gerekir:

function onScroll (evt) {

    // Store the scroll value for laterz.
    lastScrollY = window.scrollY;

    // Prevent multiple rAF callbacks.
    if (scheduledAnimationFrame)
    return;

    scheduledAnimationFrame = true;
    requestAnimationFrame(readAndUpdatePage);
}

window.addEventListener('scroll', onScroll);

Bunu yapmak, giriş işleyicilerinizin hafif kalmasını sağlamanın da ek avantajını sağlar. Bu sayede, hesaplama açısından pahalı kodlarda kaydırma veya dokunma gibi işlemleri engellemezsiniz.