Rumah >hujung hadapan web >tutorial js >Tunggu, HTML Mempunyai Kitaran Hayat?
Kitaran Hayat Asli HTML (Kitaran Hayat) lazimnya merujuk kepada peristiwa dan peringkat yang dialami oleh penyemak imbas semasa memuatkan dan memproses halaman web. Walaupun HTML itu sendiri ialah bahasa penanda dan tidak mempunyai cangkuk kitaran hayat seperti JavaScript, peristiwa kitaran hayat HTML sebenarnya diuruskan melalui interaksi JavaScript dengan DOM (Model Objek Dokumen).
Apabila penyemak imbas memuatkan halaman web, ia menerima fail HTML daripada pelayan dan mula menghuraikannya. Semasa peringkat ini, penyemak imbas mencipta pepohon DOM (Model Objek Dokumen) dan menukar HTML kepada objek DOM yang boleh dimanipulasi.
Tegasnya, penghuraian HTML ialah fasa penting dalam proses pemuatan halaman tetapi tidak termasuk dalam kategori "peristiwa kitaran hayat" dalam erti kata tradisional, kerana ia tidak boleh ditangkap atau didengar secara langsung melalui JavaScript. Walau bagaimanapun, dari perspektif yang lebih luas, penghuraian HTML merupakan bahagian yang amat diperlukan dalam kitaran hayat keseluruhan halaman, menjadikannya komponen penting dalam perbincangan tentang kitaran hayat HTML.
Proses ini adalah dalaman kepada penyemak imbas, jadi pembangun tidak boleh mendengar terus fasa ini. Walau bagaimanapun, mereka boleh meningkatkan kelajuan penghuraian dengan mengoptimumkan struktur HTML dan meminimumkan sumber penyekatan (seperti fail JavaScript).
Semasa pelayar menghuraikan HTML, ia menemui sumber luaran. Bergantung pada jenis sumber, kaedah pemuatan (segerak atau tak segerak) dan keutamaan, penyemak imbas memutuskan cara untuk meneruskan memuatkan dan memaparkan halaman. Tingkah laku ini secara langsung mempengaruhi jujukan pemaparan halaman dan masa pemuatan kandungan yang boleh dilihat oleh pengguna.
Jenis sumber yang berbeza mempunyai gelagat pemuatan yang berbeza, yang mempengaruhi penghuraian dan pemaparan halaman:
Pemuatan CSS: Apabila penyemak imbas menemui
Pemuatan JavaScript: Secara lalai, apabila penyemak imbas menemui
Secara keseluruhannya, memuatkan sumber luaran berkait rapat dengan kitaran hayat halaman kerana pemuatan sumber luaran memberi kesan kepada penghuraian, pemaparan dan pencetus peristiwa kitaran hayat kritikal seperti DOMContentLoaded dan pemuatan. Lebih pendek masa muat sumber luaran, lebih cepat peristiwa kitaran hayat dicetuskan.
ReadyState dan ReadyStatechange adalah dua atribut penyemak imbas utama dan peristiwa yang digunakan untuk mengesan keadaan dokumen dan permintaan rangkaian (seperti permintaan AJAX). Mereka membantu pemaju memahami peringkat yang berlainan dalam proses pemuatan halaman web dan melaksanakan operasi yang sepadan semasa peringkat ini. Mereka digunakan terutamanya dalam konteks pemuatan dokumen dan permintaan rangkaian (mis., XMLHTTPREQUEST).
Dokumen. Properti Properti mewakili keadaan semasa dokumen dan mempunyai tiga nilai yang mungkin, sepadan dengan tahap pemuatan dokumen yang berbeza:
Menggunakan document.readystate, pemaju boleh menyemak keadaan pemuatan dokumen dan melakukan tindakan yang sepadan berdasarkan keadaan yang berbeza. Contohnya:
if (document.readyState === 'complete') { // The page is fully loaded; perform page operations }Acara ReadyStatechange
document.addEventListener('readystatechange', function () { if (document.readyState === 'interactive') { // The DOM tree has been completely built; DOM manipulation is now possible console.log('DOM is fully parsed'); } else if (document.readyState === 'complete') { // The entire page, including all resources, is fully loaded console.log('Page and resources are fully loaded'); } });di bawah adalah contoh HTML yang menggambarkan penggunaan Document.readystate dan ReadyStateChange untuk menjejaki peringkat pemuatan dokumen yang berbeza. Halaman ini mengandungi elemen HTML asas dan memaparkan kandungan atau maklumat yang sepadan pada tahap siap sedia yang berbeza:
<meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document ReadyState Example</title> <style> body { font-family: Arial, sans-serif; padding: 20px; } .status { font-size: 1.2em; color: #333; margin: 20px 0; } img { max-width: 100%; height: auto; } </style> <h1>Hello World</h1> <script> function updateStatus() { console.log(document.readyState); switch (document.readyState) { case 'loading': console.log('loading'); break; case 'interactive': console.log('interactive'); break; case 'complete': console.log('complete'); break; } } updateStatus(); document.addEventListener('readystatechange', updateStatus); </script>output kod di atas:
loading interactive completeAcara DomContentLoaded
Acara DomContentLoaded berlaku pada objek dokumen dan mesti ditangkap menggunakan AddEventListener:
document.addEventListener('DOMContentLoaded', () => {});Acara DOMContentLoaded dicetuskan apabila penyemak imbas selesai menghidupkan dokumen HTML dan menghasilkan semua nod DOM. Walau bagaimanapun, ia tidak memerlukan sumber luaran (mis., Imej, video, stylesheets, atau fail fon) untuk dimuat sepenuhnya.
Sebagai contoh, jika halaman mengandungi imej yang besar, acara domcontentloaded akan dibakar sebelum imej dimuatkan sepenuhnya. Pada ketika ini, Dom Tree dibina sepenuhnya, dan pemaju boleh memanipulasi dan mengakses elemen DOM pada halaman. Berikut adalah contoh:
if (document.readyState === 'complete') { // The page is fully loaded; perform page operations }
Jika terdapat fail JavaScript segerak pada halaman (iaitu, skrip tanpa atribut async atau menangguhkan), penyemak imbas akan menjeda HTML parsing ketika menemui A & lt; skrip & gt; Tag, tunggu skrip untuk dilaksanakan, dan kemudian teruskan parsing. Ini akan melambatkan pencetus acara domcontentloaded.
document.addEventListener('readystatechange', function () { if (document.readyState === 'interactive') { // The DOM tree has been completely built; DOM manipulation is now possible console.log('DOM is fully parsed'); } else if (document.readyState === 'complete') { // The entire page, including all resources, is fully loaded console.log('Page and resources are fully loaded'); } });
Pesanan output:
skrip yang tidak tidak menyekat acara domcontentloaded termasuk:
Acara beban dicetuskan pada objek tetingkap apabila seluruh halaman, termasuk gaya, imej, dan sumber lain, dimuatkan sepenuhnya. Acara ini boleh ditangkap menggunakan harta Onload.
Berikut adalah contoh di mana saiz imej dipaparkan dengan betul kerana window.onload menunggu sehingga semua imej dimuatkan sepenuhnya:
<meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document ReadyState Example</title> <style> body { font-family: Arial, sans-serif; padding: 20px; } .status { font-size: 1.2em; color: #333; margin: 20px 0; } img { max-width: 100%; height: auto; } </style> <h1>Hello World</h1> <script> function updateStatus() { console.log(document.readyState); switch (document.readyState) { case 'loading': console.log('loading'); break; case 'interactive': console.log('interactive'); break; case 'complete': console.log('complete'); break; } } updateStatus(); document.addEventListener('readystatechange', updateStatus); </script>
Acara sebelum ini dicetuskan sebelum halaman hendak dibongkar (mis., Apabila pengguna menavigasi ke halaman lain, menutup tab, atau menyegarkan halaman). Acara ini membolehkan pemaju meminta pengguna mengesahkan jika mereka benar -benar mahu meninggalkan halaman tersebut. Ia biasanya digunakan untuk mengingatkan pengguna untuk menyimpan data yang tidak selamat atau memberi amaran kepada mereka tentang kehilangan data yang berpotensi.
Pelayar membenarkan mesej ringkas dipaparkan semasa acara ini, meminta pengguna jika mereka pasti mereka mahu meninggalkan halaman tersebut. Sebagai contoh, apabila pengguna telah memasukkan kandungan ke dalam bentuk yang tidak diselamatkan, pemaju boleh menggunakan sebelum ini untuk mengelakkan penutupan halaman atau penyegaran halaman yang tidak disengajakan.
Penyemak imbas moden tidak memaparkan mesej prompt tersuai. Sebaliknya, mereka menunjukkan mesej amaran standard. Berikut adalah contoh:
loading interactive complete
Apabila pengguna cuba meninggalkan halaman, acara ini mencetuskan dialog pengesahan, meminta mereka sama ada mereka mahu meninggalkan atau tinggal di halaman.
Disebabkan keselamatan dan pengalaman pengalaman pengguna, pelayar mengabaikan mesej tersuai dan sebaliknya memaparkan dialog generik. Terlalu terbenam sebelum ini boleh merendahkan pengalaman pengguna, jadi ia hanya boleh digunakan apabila benar -benar diperlukan, seperti dalam kes data yang tidak diselamatkan.
Acara pemunggahan dicetuskan apabila halaman itu dipunggah sepenuhnya (mis., Apabila halaman ditutup, disegarkan, atau dilayari dari). Tidak seperti sebelum ini, acara memunggah tidak dapat menghalang pengguna meninggalkan halaman. Ia digunakan terutamanya untuk melaksanakan tugas pembersihan akhir, seperti membersihkan data sementara, membatalkan permintaan tak segerak, dan melepaskan memori.
Acara pemunggahan tidak boleh mendorong pengguna, tidak seperti sebelum ini. Sebaliknya, ia digunakan untuk operasi seperti menutup sambungan WebSocket, menyimpan data ke penyimpanan tempatan, atau membersihkan pemasa.
Satu permohonan khusus untuk acara pemunggahan adalah untuk menghantar data analisis sebelum halaman memunggah. Kaedah Navigator.Sendbeacon (URL, Data) boleh digunakan untuk menghantar data di latar belakang tanpa melambatkan pemunggahan halaman. Contohnya:
if (document.readyState === 'complete') { // The page is fully loaded; perform page operations }Apabila permintaan Sendbeacon selesai, penyemak imbas mungkin telah meninggalkan dokumen itu, jadi tidak ada respons pelayan yang boleh diperolehi (respons sering kosong untuk tujuan analisis).
Ringkasan
Tunggu, HTML Mempunyai Kitaran Hayat? adalah platform tanpa pelayan gen yang akan datang untuk web hosting, tugas async, dan redis:
Sokongan pelbagai bahasa
berkembang dengan node.js, python, pergi, atau karat.
hanya membayar untuk penggunaan - tiada permintaan, tiada caj.
pay-as-you-go tanpa caj terbiar.
ui intuitif untuk persediaan tanpa usaha.
auto-scaling untuk mengendalikan kesesuaian yang tinggi dengan mudah.
Atas ialah kandungan terperinci Tunggu, HTML Mempunyai Kitaran Hayat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!