cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Jelas sekali js yang memakan masa ditulis di hujung kandungan, mengapa halaman menunggu sehingga js hampir dimuatkan sebelum ia dipaparkan?

Baru-baru ini, saya telah memikirkan tentang kesan kedudukan css dan js dalam halaman pada pemuatan dan prestasi halaman. Saya juga telah menulis beberapa demo dan menemui beberapa soalan, seperti meletakkan beberapa js yang memakan masa di bahagian bawah. badan untuk menghalang pemuatan halaman. Tetapi demo yang saya taip nampaknya tidak selaras dengan apa yang diperkatakan oleh semua orang. Kod khusus adalah seperti berikut:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>我是第1行</p>
<p>我是第2行</p>
<p>我是第3行</p>
<p>我是第4行</p>
<p>我是第5行</p>
<p>我是第6行</p>
<script>
    console.time("t1");
    var str =0;
    for(var i = 0;i<500000000;i ++){
        str +=i;
    }
    console.timeEnd("t1");
    alert(str);
</script>
</body>
</html>

Adalah alasan bahawa 6 elemen P harus dibentangkan dahulu, dan kemudian tunggu beberapa saat sebelum berjaga-jaga (str Tetapi hasilnya tidak seperti ini. Berikut ialah cara kod ini berjalan dalam beberapa pelayar: chrome Bar pemuatan berpusing dan berpusing, kemudian amaran, klik OK dan kemudian halaman dibentangkan
2.iaitu dan Firefox menunggu bar pemuatan berputar dan berpusing, dan kemudian halaman dan amaran muncul hampir pada masa yang sama (ia; sepatutnya membuat halaman terlebih dahulu dan kemudian berjaga-jaga, kerana apabila amaran adalah elemen telah muncul

Ini yang saya cuba:

1. Tambahkan kaedah onload pada badan:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body onload = "fn()">
<p>我是第1行</p>
<p>我是第2行</p>
<p>我是第3行</p>
<p>我是第4行</p>
<p>我是第5行</p>
<p>我是第6行</p>
<script>
function fn(){
    console.time("t1");
    var str =0;
    for(var i = 0;i<5000000000;i ++){
        str +=i;
    }
    console.timeEnd("t1");
    alert(str);
}
</script>
</body>
</html>

Tiada perubahan dalam keputusan;

2. Gunakan kaedah window.onload:

<script>
    function fn(){
        console.time("t1");
        var str =0;
        for(var i = 0;i<500000000;i ++){
            str +=i;
        }
        console.timeEnd("t1");
        alert(str);
    }
    window.onload = fn;
</script>

Hasilnya sama, tiada perubahan;

3 Tulis skrip sebagai pautan luaran, dan hasil ujian masih sama (saya mencubanya di rumah semalam, dan nampaknya elemen halaman dipaparkan dahulu dan kemudian js dimuatkan, tetapi tidak ada cara untuk mengesahkannya sekarang. Saya tidak tahu sama ada ia adalah masalah versi penyemak imbas ); dalam Firefox saya pun tak faham


Ini kali pertama saya bertanyakan soalan, saya harap anda semua boleh ambil mudah 0.0~ Terima kasih terlebih dahulu

学习ing学习ing2716 hari yang lalu816

membalas semua(3)saya akan balas

  • PHP中文网

    PHP中文网2017-06-26 10:55:45

    Apa yang anda katakan di atas masuk akal. Ia sepatutnya kerana gelung for menggunakan sumber CPU, menyebabkan skrin pertama dimuatkan dengan perlahan.
    Malah teg skrip di bahagian bawah badan akan memperlahankan skrin pertama, kerana penyemak imbas akan meminta fail js yang sepadan pada awal-awal lagi, dan ini mengambil bilangan pautan TCP, lebar jalur dan juga masa yang diperlukan yang terhad untuk menjalankan CPU yang diperlukan.

    balas
    0
  • 迷茫

    迷茫2017-06-26 10:55:45

    Teg skrip diletakkan di bahagian bawah badan untuk menghalang teg skrip daripada menyekat muat turun fail sumber halaman lain dan mempercepatkan pemuatan sumber berkaitan halaman.
    Tetapi pemaparan keseluruhan halaman masih akan ditamatkan oleh teg skrip, jadi dalam contoh anda halaman akan kekal kosong sehingga operasi skrip selesai dan halaman tidak akan dipaparkan sehingga ia dipaparkan.

    Dalam contoh yang anda berikan, jika anda mahu halaman dipaparkan dahulu dan kemudian pengiraan skrip dilakukan, anda boleh menggunakan setTimeout untuk melaksanakan skrip secara tidak segerak, seperti:

    setTimeout(function() {
      //需要执行将脚本...
    }, 0);

    balas
    0
  • 大家讲道理

    大家讲道理2017-06-26 10:55:45

    Saya rasa ini kerana ia mengambil terlalu banyak sumber CPU, dan pemaparan halaman juga memerlukan sumber CPU

    Jika operasi yang memakan masa ini digantikan dengan IO, saya rasa ia akan mengikut jangkaan

    PS: Rasa, cuba bila kosong

    balas
    0
  • Batalbalas