0Pricing
React Academy · Pelajaran

Mengapa Debounce dan Throttle Penting dalam UI

Pahami biaya performa dari penangan keypress, guliran, dan pengubahan ukuran tanpa throttle, serta kapan setiap solusi digunakan.

Mengapa Debounce dan Throttle Penting dalam UI adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.

Peristiwa Pengguna Berfrekuensi Tinggi

Peristiwa DOM tertentu terjadi pada frekuensi yang sangat tinggi. Peristiwa keypress terjadi pada setiap penekanan tombol. Peristiwa scroll terjadi puluhan kali per detik saat menggulir. Peristiwa resize terjadi terus-menerus saat pengguna menyeret batas jendela. Memproses setiap peristiwa satu per satu dapat membebani browser dan server Anda.

Dampak Penangan yang Tidak Dibatasi

Jika penangan penekanan tombol Anda melakukan panggilan API pada setiap penekanan tombol, pengguna yang mengetik "React hooks" (11 karakter) akan memicu 11 permintaan jaringan, yang sebagian besar merupakan kueri yang belum lengkap. Demikian pula, memperbarui animasi paralaks pada setiap piksel pengguliran dapat memicu ratusan perenderan ulang React per detik. Hal ini membuang CPU, jaringan, dan daya baterai.

Cara Kerja Penundaan

Penundaan menunda eksekusi hingga peristiwa berhenti terjadi selama jangka waktu tertentu. Jika pengguna masih mengetik, pengatur waktu diatur ulang pada setiap penekanan tombol. Hanya setelah tidak ada aktivitas selama N milidetik, penangan akhirnya dijalankan sekali. Penundaan menjawab pertanyaan: "jalankan ini setelah pengguna selesai melakukan sesuatu."

Cara Kerja Pembatasan Laju

Pembatasan laju membatasi eksekusi hingga paling banyak satu kali per interval waktu, terlepas dari jumlah peristiwa yang terjadi. Jika pengguna menggulir dengan cepat, pembatasan selama 100 milidetik memastikan penangan Anda dijalankan tidak lebih dari 10 kali per detik. Pembatasan laju menjawab pertanyaan: "jalankan ini secara berkala, tetapi jangan lebih sering daripada setiap N milidetik."

Kapan Menggunakan Penundaan

Penundaan merupakan pilihan tepat ketika Anda hanya memerlukan nilai akhir setelah pengguna berhenti. Contoh umum: masukan pencarian (kirim permintaan API setelah jeda mengetik), penangan pengubahan ukuran jendela (hitung ulang tata letak setelah pengubahan ukuran selesai), dan validasi bidang formulir yang memeriksa server (tunggu masukan lengkap sebelum memvalidasi).

Kapan Menggunakan Pembatasan Laju

Pembatasan laju merupakan pilihan tepat ketika Anda menginginkan pembaruan rutin selama aktivitas berkelanjutan. Contoh umum: penangan posisi pengguliran (perbarui bilah kemajuan membaca atau tajuk tetap paling banyak 30 frame per detik), pelacakan gerakan tetikus (catat posisi kursor untuk analitik), dan penangan peristiwa seret (perbarui posisi elemen yang dapat diseret dengan lancar tanpa membanjiri sistem).

Implementasi Naif Memiliki Jebakan

Menulis penundaan atau pembatasan laju dari awal tanpa pemahaman menyeluruh dapat menyebabkan bug seperti melewatkan peristiwa terakhir (tepi akhir), memicu pada tepi yang salah, atau tidak membersihkan pengatur waktu saat komponen dilepas. Umumnya, lebih baik menggunakan implementasi yang telah teruji dari pustaka seperti lodash, yang menangani semua kasus tepi dengan benar.

lodash.debounce dan lodash.throttle

Lodash menyediakan _.debounce(fn, wait) dan _.throttle(fn, wait) dengan opsi untuk perilaku tepi awal dan akhir. Fungsi yang dikembalikan memiliki metode .cancel() untuk membatalkan pemanggilan yang tertunda dan metode .flush() untuk menjalankannya segera. Fungsi-fungsi ini sebaiknya dibungkus dalam useRef di React agar tidak dibuat ulang saat perenderan ulang.

Anggaran Kinerja

Bahkan 50 perenderan ulang React tambahan per detik akibat penangan pengguliran tanpa pembatasan laju dapat menghabiskan CPU secara signifikan, terutama pada perangkat seluler kelas bawah. Anggaran bingkai 16 milidetik (60 frame per detik) berarti setiap perenderan ulang harus selesai dalam waktu kurang dari 16 milidetik agar tidak terjadi bingkai yang terlewat. Penundaan dan pembatasan laju merupakan garis pertahanan pertama Anda terhadap masalah laju bingkai.

Penangan Peristiwa vs Pembaruan Status

Tidak semua penangan berfrekuensi tinggi memerlukan penundaan. Jika penangan peristiwa hanya membaca nilai tanpa memperbarui status atau memanggil API—misalnya, mencatat posisi tetikus terakhir dalam referensi—tidak diperlukan penundaan. Tunda atau batasi laju hanya pada penangan yang memicu operasi mahal: pembaruan status, panggilan API, atau pengukuran DOM.

Membatalkan Fungsi yang Ditunda

Saat komponen dilepas, panggilan tertunda apa pun harus dibatalkan untuk mencegah pembaruan status setelah pelepasan. Jika Anda menggunakan useRef untuk menyimpan fungsi yang ditunda, panggil debouncedFn.cancel() dalam pembersihan useEffect. Fungsi yang ditunda dari Lodash menyediakan metode ini khusus untuk tujuan tersebut.

Penggunaan Penundaan vs Pembatasan Laju

Teknik mana yang harus Anda gunakan untuk memicu panggilan API ketika pengguna berhenti mengetik di bidang pencarian?

Ringkasan Pelajaran: Penundaan dan Pembatasan Laju

Peristiwa berfrekuensi tinggi seperti penekanan tombol, pengguliran, dan pengubahan ukuran dapat menyebabkan masalah kinerja jika penangan dijalankan pada setiap peristiwa. Penundaan menunggu hingga aktivitas berhenti dan paling sesuai untuk masukan pencarian serta penangan pengubahan ukuran. Pembatasan laju membatasi frekuensi dan paling sesuai untuk pengguliran serta penyeretan. Gunakan implementasi lodash yang disimpan dalam referensi, dan selalu batalkan saat komponen dilepas.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengapa Debounce dan Throttle Penting dalam UI” gratis?

Ya — teks lengkap “Mengapa Debounce dan Throttle Penting dalam UI” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mengapa Debounce dan Throttle Penting dalam UI”?

Pahami biaya performa dari penangan keypress, guliran, dan pengubahan ukuran tanpa throttle, serta kapan setiap solusi digunakan. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai React Academy?

Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Mengapa Debounce dan Throttle Penting dalam UI” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?

Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa Debounce dan Throttle Penting dalam UI
  2. Mengimplementasikan Hook Kustom useDebounce
  3. Mengimplementasikan Hook Kustom useThrottle
  4. Penerapan Praktis: Pencarian, Gulir, Pengubahan Ukuran
← Kembali ke React Academy