Rumah >hujung hadapan web >tutorial js >Reflows dan Repaints dalam Javascript
Satu aliran semula (juga dipanggil susun atur atau susun atur semula) berlaku apabila penyemak imbas mengira semula kedudukan, saiz dan reka letak elemen pada halaman. Proses ini berlaku setiap kali reka letak halaman berubah seperti apabila elemen ditambah, dialih keluar, saiz semula atau keterlihatannya berubah. Ia merupakan operasi yang lebih kompleks dan memakan masa
<div id="box" style="width: 100px; height: 100px; background-color: blue;"></div> <script> const box = document.getElementById('box'); // Triggering a reflow by changing width and height box.style.width = '200px'; box.style.height = '200px'; // Triggering a repaint by changing the background color box.style.backgroundColor = 'red'; </script>
Apabila anda menukar sesuatu yang mempengaruhi reka letak halaman, penyemak imbas perlu:
Jika banyak elemen dipengaruhi oleh satu perubahan, pengaliran semula boleh menjadi mahal dan memperlahankan prestasi tapak anda.
cat semula (atau lukis semula) berlaku apabila sifat visual sesuatu elemen berubah tetapi reka letak tidak. Ia lebih murah daripada aliran semula kerana ia hanya memerlukan mengemas kini penampilan elemen tanpa mengira semula kedudukan atau reka letaknya. Pengecatan semula berlaku selepas reka letak dikira semula (dalam kes di mana kedua-duanya diperlukan) atau apabila sifat yang tidak menjejaskan reka letak ditukar, seperti warna atau keterlihatan.
<div id="box" style="width: 100px; height: 100px; background-color: blue;"></div> <script> // Triggering a repaint by changing the background color box.style.backgroundColor = 'red'; </script>
Mengecat semula tidak melibatkan pengiraan semula reka letak, jadi ia lebih pantas daripada aliran semula, tetapi ia masih memerlukan melukis semula bahagian halaman, yang mengambil sedikit masa.
Minimumkan manipulasi DOM : Gunakan teknik seperti menggabungkan kemas kini DOM (seperti yang dinyatakan sebelum ini) atau DocumentFragment untuk membuat berbilang perubahan sekaligus, bukannya satu demi satu.
Elakkan perebutan reka letak : Jika anda membaca sifat reka letak (cth., offsetHeight) dan segera menulis (tukar reka letak) dalam kitaran yang sama, ia memaksa pengaliran semula, yang dikenali sebagai pecah reka letak. Untuk mengelakkan ini, pisahkan sifat membaca dan menulis DOM dalam langkah yang berbeza.
<div id="box" style="width: 100px; height: 100px; background-color: blue;"></div> <script> const box = document.getElementById('box'); // Triggering a reflow by changing width and height box.style.width = '200px'; box.style.height = '200px'; // Triggering a repaint by changing the background color box.style.backgroundColor = 'red'; </script>
Gunakan kelas CSS : Daripada mengubah suai gaya individu, gunakan kelas CSS untuk membuat perubahan. Penyemak imbas mengendalikan penukaran kelas dengan lebih cekap.
<div id="box" style="width: 100px; height: 100px; background-color: blue;"></div> <script> // Triggering a repaint by changing the background color box.style.backgroundColor = 'red'; </script>
Kurangkan kerumitan CSS: Elakkan elemen bersarang dalam dan peraturan CSS yang terlalu kompleks yang boleh mencetuskan aliran semula.
Gunakan keterlihatan: tersembunyi dan bukannya paparan: tiada apabila anda hanya mahu menyembunyikan elemen tanpa menjejaskan reka letak. paparan: tiada yang mencetuskan aliran semula, manakala keterlihatan: tersembunyi hanya mencetuskan pengecatan semula.
Atas ialah kandungan terperinci Reflows dan Repaints dalam Javascript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!