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şleyiciler, karelerin tamamlanmasını engelleyebileceği ve fazladan 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şleyicilerde stil değişikliği yapmayın.
  • İşleyicilerinizin gecikmesini kaldırın; etkinlik değerlerini saklayın ve bir sonraki requestAnimationFrame geri çağırma işlevinde stil değişikliklerini ele alın.

Uzun çalışan giriş işleyicilerden kaçınma

Kullanıcı sayfayla etkileşime geçtiğinde 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 birleştirici.

Bununla birlikte, touchstart, touchmove veya touchend gibi bir giriş işleyici eklerseniz, preventDefault() çağrısı yapmayı ve dokunma kaydırmanın gerçekleşmesini durdurmayı seçebilirsiniz. Bu nedenle, birleştirici iş parçacığının bu işleyicinin yürütmesini tamamlamasını beklemesi gerekir. preventDefault() öğesini çağırmasanız bile birleştiricinin beklemesi gerekir ve kullanıcının kaydırma işlemi engellenir. Bu, takılmaya ve karelerin kaçırılmasına neden olabilir.

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

Özetlemek gerekirse, çalıştırdığınız 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şleyicilerde stil değişikliklerinden kaçınma

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 öğesinin başında bekleyen stil değişiklikleri olur. Daha sonra, requestAnimationFrame geri çağırmasının başında görsel özellikleri okursanız "Büyük, karmaşık düzenlerden ve düzen taşmasından kaçının" bölümündeki tavsiyede de belirtildiği gibi, zorunlu bir eşzamanlı düzeni tetiklersiniz.

Çok kaydırma; JavaScript'te birleştirici engellendi.

Kaydırma işleyicilerinizin çıktısını çıkarın

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);

Bu işlem, giriş işleyicilerinizin açık tutulması gibi ek bir avantaj sağlar. Bu harika bir olanaktır çünkü artık kaydırma veya işlem yükü açısından pahalı kodlara dokunma gibi işlemleri engellememiş olursunuz.