Rumah hujung hadapan web tutorial js Petua Pantas: Cara Tatal Tatal Tatal

Petua Pantas: Cara Tatal Tatal Tatal

Feb 17, 2025 am 10:07 AM

Quick Tip: How to Throttle Scroll Events

mata utama

    Mendengarkan peristiwa tatal boleh menyebabkan kemerosotan prestasi kerana penyemak imbas melaksanakan fungsi panggil balik setiap kali tatal pengguna; Throttle memastikan aliran peristiwa yang berterusan sepanjang selang masa tertentu, sementara de-bumping menggabungkan satu siri peristiwa ke dalam satu peristiwa.
  • Melaksanakan acara throttling di JavaScript boleh menjadi rumit, dan disyorkan untuk menggunakan pelaksanaan pihak ketiga seperti Lodash, yang merupakan standard untuk throttling acara. Fungsi Throttling Lodash memudahkan throttling acara rolling dan menyediakan pilihan untuk menentukan sama ada fungsi panggil balik dilaksanakan di bahagian depan dan/atau belakang acara.
  • Kunci untuk memilih pendikit dan debounce adalah melihat sifat masalah yang akan diselesaikan. Throttle terpakai kepada peristiwa -peristiwa yang berlaku dalam tempoh masa tertentu, seperti menatal, sementara Debounce terpakai kepada peristiwa -peristiwa seperti penekan utama, di mana selang antara peristiwa tidak penting.

Artikel ini dikaji semula oleh Vildan Softic dan Julian Motz. Terima kasih kepada semua pengulas rakan sebaya SitePoint untuk mendapatkan kandungan SitePoint untuk yang terbaik!

Salah satu bahaya mendengar peristiwa tatal adalah kemerosotan prestasi. Pelayar melaksanakan fungsi panggil balik setiap kali skrol pengguna, yang boleh mempunyai banyak peristiwa sesaat. Jika fungsi panggil balik melakukan banyak operasi REDRAW, ini bermakna berita buruk untuk pengguna akhir. Redrawing adalah mahal, terutamanya apabila menyusun semula kebanyakan pandangan, seperti ketika kejadian tatal berlaku.

Contoh berikut menggambarkan masalah ini:

Lihat Contoh pada Codepen: Unthrottling Scrolling Events

Selain kemerosotan prestasi dan terdedah kepada sawan. Contoh ini menggambarkan apa yang berlaku apabila komputer mengikuti arahan anda. Tiada peralihan yang lancar antara warna latar belakang, skrin hanya berkelip. Mana -mana pengaturcara malang mungkin merasakan bahawa tidak ada harapan di dunia ini. Adakah tidak ada cara yang lebih baik?

peristiwa standard

Satu penyelesaian adalah untuk menangguhkan peristiwa dan menguruskan pelbagai acara sekaligus. Terdapat dua fungsi yang biasa digunakan yang dapat membantu kita melakukan ini: pendikit dan debounce.

amanah memastikan aliran peristiwa yang berterusan sepanjang selang waktu tertentu, sementara de-bumping menggabungkan satu siri peristiwa ke dalam satu peristiwa. Salah satu cara berfikir ialah pendikit adalah berdasarkan masa, manakala debounce adalah berdasarkan peristiwa. Throttle dijamin akan dilaksanakan, sementara de-jitter tidak dijamin akan dilaksanakan selepas paket berlaku. Sekiranya anda ingin mengetahui lebih lanjut mengenai ini, sila lihat perbincangan mendalam ini mengenai de-bumping dan pendikit.

de-shaking

Debounce menyelesaikan masalah yang berbeza, seperti butang dengan Ajax. Mengapa Menghantar Permintaan untuk Setiap Keypress Apabila anda menaip sesuatu dalam bentuk? Penyelesaian yang lebih elegan adalah untuk menggabungkan satu siri kunci ke dalam satu peristiwa yang akan mencetuskan permintaan AJAX. Ini mematuhi proses semula jadi menaip dan menjimatkan sumber pelayan. Untuk penekan utama, selang antara peristiwa tidak penting kerana pengguna tidak menaip pada kadar yang tetap.

Trust

kerana tidak ada jaminan debounce, kaedah lain adalah untuk mendekati acara rolling. Menatal berlaku dalam jangka masa tertentu, jadi sesuai untuk pendikit. Setelah pengguna mula menatal, kami ingin memastikan pelaksanaan tepat pada masanya.

Teknik ini membantu memeriksa sama ada kami berada di bahagian tertentu halaman. Memandangkan saiz halaman, ia mengambil masa beberapa saat untuk menatal melalui kandungan. Ini membolehkan pendikit untuk mencetuskan peristiwa hanya sekali dalam selang tertentu. Throttling acara akan menjadikan pengalaman menatal lebih lancar dan memastikan pelaksanaan.

Berikut adalah pendikit peristiwa mudah yang ditulis dalam JavaScript asli:

function throttle(fn, wait) {
  var time = Date.now();
  return function() {
    if ((time + wait - Date.now()) < 0) {
      fn();
      time = Date.now();
    }
  }
}
Salin selepas log masuk

Pelaksanaan ini menetapkan pembolehubah masa yang menjejaki masa ketika fungsi pertama dipanggil. Setiap kali fungsi yang dikembalikan dipanggil, ia memeriksa jika selang menunggu telah berlalu, dan jika ya, ia mencetuskan panggilan balik dan menetapkan semula masa.

Lihat Contoh pada Codepen: Pelaksanaan Native JS throttling

Perpustakaan Pengguna

Terdapat banyak bahaya dalam acara pendikit, dan tidak disyorkan untuk menulis sendiri. Daripada menulis pelaksanaan anda sendiri, saya cadangkan menggunakan pelaksanaan pihak ketiga.

lodash

Lodash adalah standard de facto untuk throttling acara di JavaScript. Perpustakaan ini adalah sumber terbuka supaya anda boleh melayari kod yang anda suka. Manfaatnya adalah bahawa perpustakaan adalah modular, jadi anda boleh mendapatkan apa yang anda inginkan daripadanya.

Menggunakan fungsi pendikit Lodash, throttling acara rolling menjadi mudah:

window.addEventListener('scroll', _.throttle(callback, 1000));
Salin selepas log masuk

Ini mengehadkan torrent acara rolling masuk ke sekali setiap 1000 milisaat (satu saat).

API

menyediakan pilihan depan dan belakang seperti berikut:

_.throttle(callback, 1, { trailing: true, leading: true });
Salin selepas log masuk

Pilihan ini menentukan sama ada fungsi panggil balik dilaksanakan di bahagian depan dan/atau pinggir belakang acara.

Satu masalah di sini ialah jika anda menetapkan kedua -dua bahagian depan dan kelebihan belakang ke palsu, fungsi panggil balik tidak akan terbakar. Menetapkan kelebihan depan ke True akan segera memulakan pelaksanaan panggilan balik dan kemudian pendikit. Ini memastikan pelaksanaan untuk setiap selang apabila anda menetapkan kedua -dua tepi depan dan trailing menjadi benar.

Lihat demo pada codepen: acara rolling throttle

Dari melihat kod sumber, saya mendapati menarik bahawa Throttle () hanya pembungkus untuk debounce (). Throttle hanya lulus satu set parameter yang berbeza untuk mengubah tingkah laku yang dikehendaki. Throttle menetapkan maxwait, yang akan menjamin pelaksanaan sebaik sahaja anda menunggu lama ini. Selebihnya pelaksanaan tetap sama.

Saya harap anda dapat mencari lodash yang baik untuk anda dalam acara seterusnya!

Kesimpulan

Kunci untuk pendikit dan debounce adalah untuk memeriksa sifat masalah yang akan diselesaikan. Kedua -dua teknologi ini sesuai untuk kes penggunaan yang berbeza. Saya cadangkan melihat soalan dari perspektif pengguna untuk mencari jawapannya.

Kelebihan menggunakan Lodash adalah bahawa ia abstrak banyak kerumitan dalam API yang mudah. Berita baiknya ialah anda boleh menggunakan _.throttle() dalam projek anda tanpa menambah seluruh perpustakaan. Terdapat Lodash-CLI, alat yang membolehkan anda membuat hanya membina tersuai yang mengandungi fungsi yang diperlukan. Throttling acara hanyalah sebahagian kecil daripada seluruh perpustakaan.

Soalan Lazim Mengenai Peristiwa Rolling Throttling (Soalan Lazim)

  • Apakah tujuan acara rolling dalam JavaScript?

Acara Percaya Percaya di JavaScript adalah teknologi yang digunakan untuk mengoptimumkan prestasi laman web atau aplikasi web. Apabila pengguna menatal pada laman web, penyemak imbas menghasilkan acara tatal untuk pergerakan setiap piksel. Ini boleh menyebabkan beratus -ratus atau bahkan beribu -ribu peristiwa yang dihasilkan sesaat, yang boleh merendahkan prestasi laman web. Dengan membuang peristiwa -peristiwa ini, kita dapat mengehadkan bilangan peristiwa yang akan diproses, dengan itu meningkatkan prestasi laman web dan respons.

  • Bagaimanakah kerja pendikit di JavaScript?

Percayalah dalam JavaScript berfungsi dengan menetapkan kelewatan antara pelaksanaan acara. Apabila peristiwa dicetuskan, pemasa bermula. Sekiranya acara lain dicetuskan sebelum pemasa berakhir, acara itu diabaikan. Ini memastikan bahawa masa tertentu mesti berlalu sebelum acara lain diproses. Teknik ini amat berguna untuk peristiwa yang sering dicetuskan seperti peristiwa menatal.

  • Apakah perbezaan antara pendikit dan gegaran?

Percaya dan debounce adalah teknik yang digunakan untuk mengehadkan bilangan kali fungsi boleh dilaksanakan dari masa ke masa. Perbezaan utama antara keduanya adalah bagaimana mereka mengendalikan latensi. Throttle memastikan bahawa fungsi itu tidak dipanggil lebih daripada sekali setiap x milisaat, sementara debounce memastikan bahawa fungsi itu tidak dipanggil sehingga x milisaat telah berlalu sejak panggilan terakhir. Dalam erti kata lain, Throttling melaksanakan fungsi pada selang masa yang tetap, sementara Debounce melaksanakan fungsi selepas tempoh tidak aktif.

  • Bagaimana saya mencapai pendikit di JavaScript?

fungsi setTimeout boleh digunakan untuk pendikit dalam JavaScript. Fungsi ini membolehkan anda melambatkan pelaksanaan fungsi dengan bilangan milisaat tertentu. Dengan menggunakan setTimeout dengan pendengar acara, anda dapat memastikan bahawa fungsi pengendali acara tidak dipanggil lebih dari sekali setiap milisaat x.

  • Bolehkah saya menggunakan pendikit dengan peristiwa lain selain acara menatal?

Ya, pendikit boleh digunakan dengan apa -apa jenis acara dalam JavaScript, bukan hanya menatal acara. Ia amat berguna untuk peristiwa yang sering mencetuskan atau memerlukan pemprosesan yang luas, seperti peristiwa pergerakan tetikus, saiz semula peristiwa, dan peristiwa akhbar utama.

  • Adakah terdapat perpustakaan atau rangka kerja yang menyediakan sokongan terbina dalam untuk pendikit?

Ya, terdapat beberapa perpustakaan dan kerangka yang memberikan sokongan terbina dalam untuk pendikit. Sebagai contoh, Lodash Perpustakaan Utiliti JavaScript yang popular menyediakan fungsi pendikit yang memudahkan untuk melaksanakan pendikit. Begitu juga, jquery perpustakaan JavaScript yang popular juga menyediakan fungsi pendikit dalam APInya.

  • Apakah kelemahan potensi pendikit?

Walaupun throttling dapat meningkatkan prestasi laman web, ia juga boleh membawa kepada respons pengalaman pengguna yang perlahan jika digunakan secara tidak wajar. Sebagai contoh, jika kelewatan ditetapkan terlalu tinggi, pengguna mungkin melihat lag antara operasi mereka dan tindak balas laman web. Oleh itu, adalah penting untuk mencari keseimbangan antara prestasi dan kelajuan tindak balas apabila menggunakan pendikit.

  • Bagaimana saya menguji keberkesanan pendikit?

anda boleh menguji keberkesanan pendikit dengan mengukur prestasi laman web sebelum dan selepas pendikit. Ini boleh dilakukan menggunakan alat pemaju penyemak imbas, yang memberikan maklumat terperinci mengenai prestasi laman web, termasuk masa yang diperlukan untuk memproses acara.

  • Bolehkah pendikit digunakan dalam kombinasi dengan teknik pengoptimuman prestasi lain?

Ya, pendikit boleh digunakan dalam kombinasi dengan teknik pengoptimuman prestasi lain seperti debounce dan requestAnimationFrame. Dengan menggabungkan teknologi ini, anda dapat meningkatkan prestasi dan responsif laman web anda.

  • Adakah terdapat alternatif untuk pendikit?

Ya, terdapat beberapa alternatif untuk mendikitkan, termasuk debounce dan requestAnimationFrame. Debounce adalah sama dengan pendikit, tetapi bukannya mengehadkan bilangan kali fungsi boleh dipanggil dari masa ke masa, ia memastikan bahawa fungsi itu tidak akan dipanggil sehingga masa tertentu telah berlalu sejak panggilan terakhir. requestAnimationFrame adalah kaedah yang memberitahu penyemak imbas untuk melaksanakan animasi dan meminta penyemak imbas untuk memanggil fungsi yang ditentukan untuk mengemas kini animasi sebelum mengecat semula seterusnya.

Atas ialah kandungan terperinci Petua Pantas: Cara Tatal Tatal Tatal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1655
14
Tutorial PHP
1254
29
Tutorial C#
1228
24
Demystifying JavaScript: Apa yang berlaku dan mengapa penting Demystifying JavaScript: Apa yang berlaku dan mengapa penting Apr 09, 2025 am 12:07 AM

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Evolusi JavaScript: Trend Semasa dan Prospek Masa Depan Evolusi JavaScript: Trend Semasa dan Prospek Masa Depan Apr 10, 2025 am 09:33 AM

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

Enjin JavaScript: Membandingkan Pelaksanaan Enjin JavaScript: Membandingkan Pelaksanaan Apr 13, 2025 am 12:05 AM

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

JavaScript: meneroka serba boleh bahasa web JavaScript: meneroka serba boleh bahasa web Apr 11, 2025 am 12:01 AM

JavaScript adalah bahasa utama pembangunan web moden dan digunakan secara meluas untuk kepelbagaian dan fleksibiliti. 1) Pembangunan front-end: Membina laman web dinamik dan aplikasi satu halaman melalui operasi DOM dan kerangka moden (seperti React, Vue.js, sudut). 2) Pembangunan sisi pelayan: Node.js menggunakan model I/O yang tidak menyekat untuk mengendalikan aplikasi konkurensi tinggi dan masa nyata. 3) Pembangunan aplikasi mudah alih dan desktop: Pembangunan silang platform direalisasikan melalui reaktnatif dan elektron untuk meningkatkan kecekapan pembangunan.

Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Apr 16, 2025 am 12:12 AM

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Cara Membina Aplikasi SaaS Multi-Tenant dengan Next.js (Integrasi Frontend) Cara Membina Aplikasi SaaS Multi-Tenant dengan Next.js (Integrasi Frontend) Apr 11, 2025 am 08:22 AM

Artikel ini menunjukkan integrasi frontend dengan backend yang dijamin oleh permit, membina aplikasi edtech SaaS yang berfungsi menggunakan Next.Js. Frontend mengambil kebenaran pengguna untuk mengawal penglihatan UI dan memastikan permintaan API mematuhi dasar peranan

Dari C/C ke JavaScript: Bagaimana semuanya berfungsi Dari C/C ke JavaScript: Bagaimana semuanya berfungsi Apr 14, 2025 am 12:05 AM

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

Bagaimana saya memasang javascript? Bagaimana saya memasang javascript? Apr 05, 2025 am 12:16 AM

JavaScript tidak memerlukan pemasangan kerana ia sudah dibina dalam pelayar moden. Anda hanya memerlukan editor teks dan penyemak imbas untuk memulakan. 1) Dalam persekitaran penyemak imbas, jalankan dengan memasukkan fail HTML melalui tag. 2) Dalam persekitaran Node.js, selepas memuat turun dan memasang node.js, jalankan fail JavaScript melalui baris arahan.

See all articles