Rumah hujung hadapan web tutorial js JavaScript中的浏览器异步加载的分析

JavaScript中的浏览器异步加载的分析

Aug 06, 2018 pm 05:04 PM
javascript Pemuatan tak segerak

本篇文章给大家带来的内容是关于JavaScript中的浏览器异步加载的分析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

当我们刚学js的时候,应该就知道js是单线程,进行的是同步加载,会阻断 html 和 css 的加载线(因为js能够修改 html 和 css)

js同步加载的缺点:加载工具方法没必要阻塞文档,过得js加载会影响页面效率,一旦网速不好,那么 整个网站将等待js加载而不进行后续的渲染等工作。

js里面有些工具方法需要按需加载,用到加载,不用不加载???这时候就需要我们异步加载js。

JavaScript异步加载的三种方案。

1、defer异步加载,但要等到dom文档全部解析完才会被执行。只有IE能用,也可以将代码全部写到内部

 <script type = "text/javascript" src = "tools.js"  defer = "defer"></script>
Salin selepas log masuk
<script defer = "defer">
console.log("a");
</script>
Salin selepas log masuk

2、async 异步加载,加载完就执行,async只能加载外部脚本,不能把js写在script标签里

 <script type = "text/javascript" aysnc = "aysnc"></script>
Salin selepas log masuk

以上两种方法执行时也不阻塞页面

为了解决浏览器兼容问题??如果1,2,两种方法同时加载,会导致代码重叠覆盖执行顺序的冲突,所以引入第三种方法 通用的方法

3、创建script,插入到DOM中,加载完毕后callBack,

 var script = document.createElement(&#39;script&#39;);
 script.type = "text/javescript";
 script.src = "demo.js";
// 此时就会加载src地址里面的东西
// 此时会有一个灯塔模式,灯塔模式会产生一个img属性,用来存放地址的加载
document.head.appendChild(script);  //----此时就会在页面上展示js里面的内容
Salin selepas log masuk

当我们在外部js文件里面写一个test函数

var script = document.createElement(&#39;script&#39;);
script.type = "text/javascript";
script.src = "demo.js";
test();
document.head.appendChild(script);
Salin selepas log masuk

这里外部demo.js文件就不展示了,里面有一个test函数。结果如下:

test函数执行的时候因为加载需要时间,当test执行时,还没加载完。所以会显示test未定义。我们改如何解决这个问题呢?

首先我们就会想到onload事件。

script.onload : 兼容性特别好,Safari chrome firefox opera都兼容 ;

 script.onload = function(){
                                test();
                            }
Salin selepas log masuk

但是呢 IE 就script没有onload事件,IE人家有自己的方法:script.readyState。

script.readyState : IE 的script上面有个状态码(readyState),通过状态码的校验来判断是否加载完毕。在IE里script标签有个readyStatechange事件,这个事件监听的是,当script.readyState值变化的时候触发事件。

(script.readyState == "complete" || script.readyState =="loaded" 表示解析完毕。)

script.onreadystatechange = function(){
      if(script.readyState == "complete" || script.readyState == "loaded"){
                  callback(); //回调函数:当满足一定条件才可以被执行
              }
                  }
Salin selepas log masuk

最后我们封装函数,实现我们按需加载的功能。

 function loadScript(url,callback){
                        var script = document.createElement(&#39;script&#39;);
                        script.type = "text/javascript";
                        if(script.readyState){
                            script.onreadyStatechange = function(){
                                if (script.readyState == "loaded" || script.readyState == "complete") {
                                    obj[callback]();
                                }
                            }    
                        }else{
                            script.onload = function(){
                                obj[callback]();
                            }
                        }
                        script.src = url;
                        document.head.appendChild(script);
                    }

                    loadScript(&#39;demo.js&#39;,&#39;test&#39;);
Salin selepas log masuk

 相关文章推荐:

js教程 - 数组循环删除错误实现与解决方案

【Javascript】zepto源码Callback分析

Atas ialah kandungan terperinci JavaScript中的浏览器异步加载的分析. 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)

Berurusan secara berkesan dengan situasi di mana jQuery .val() tidak berfungsi Berurusan secara berkesan dengan situasi di mana jQuery .val() tidak berfungsi Feb 20, 2024 pm 09:36 PM

Tajuk: Kaedah dan contoh kod untuk menyelesaikan jQuery.val() tidak berfungsi Dalam pembangunan bahagian hadapan, jQuery sering digunakan untuk mengendalikan elemen halaman. Antaranya, mendapatkan atau menetapkan nilai elemen bentuk adalah salah satu operasi biasa. Biasanya, kami menggunakan kaedah .val() jQuery untuk beroperasi pada nilai elemen bentuk. Walau bagaimanapun, kadangkala anda menghadapi situasi di mana jQuery.val() tidak berfungsi, yang mungkin menyebabkan beberapa masalah. Artikel ini akan memperkenalkan cara menangani jQuery.val(

c# Apakah itu delegasi dan apakah masalah yang diselesaikannya? c# Apakah itu delegasi dan apakah masalah yang diselesaikannya? Apr 04, 2024 pm 12:42 PM

Perwakilan ialah jenis rujukan selamat jenis yang digunakan untuk menghantar penunjuk kaedah antara objek untuk menyelesaikan masalah pengaturcaraan tak segerak dan pengendalian acara: Pengaturcaraan tak segerak: Perwakilan membenarkan kaedah dilaksanakan dalam urutan atau proses yang berbeza, meningkatkan responsif aplikasi. Pengendalian acara: Perwakilan memudahkan pengendalian acara, membenarkan acara seperti klik atau pergerakan tetikus dibuat dan dikendalikan.

Cara membaca html Cara membaca html Apr 05, 2024 am 08:36 AM

Walaupun HTML sendiri tidak boleh membaca fail, pembacaan fail boleh dicapai melalui kaedah berikut: menggunakan JavaScript (XMLHttpRequest, fetch()); menggunakan bahasa sebelah pelayan (PHP, Node.js menggunakan perpustakaan pihak ketiga (jQuery. get() , axios, fs-extra).

Mod pengoptimuman utama untuk meningkatkan kelajuan tapak web, setiap pembangun bahagian hadapan mesti menguasai! Mod pengoptimuman utama untuk meningkatkan kelajuan tapak web, setiap pembangun bahagian hadapan mesti menguasai! Feb 02, 2024 pm 05:36 PM

Perkara yang mesti dimiliki oleh pembangun bahagian hadapan: kuasai mod pengoptimuman ini dan buat tapak web anda terbang! Dengan perkembangan pesat Internet, laman web telah menjadi salah satu saluran penting untuk promosi dan komunikasi korporat. Tapak web yang berprestasi baik, memuatkan pantas bukan sahaja meningkatkan pengalaman pengguna, tetapi juga menarik lebih ramai pelawat. Sebagai pembangun bahagian hadapan, adalah penting untuk menguasai beberapa corak pengoptimuman. Artikel ini akan memperkenalkan beberapa teknik pengoptimuman bahagian hadapan yang biasa digunakan untuk membantu pembangun mengoptimumkan tapak web mereka dengan lebih baik. Fail termampat Dalam pembangunan laman web, jenis fail yang biasa digunakan termasuk HTML, CSS dan J

Bagaimana untuk memperkenalkan js luaran ke dalam html Bagaimana untuk memperkenalkan js luaran ke dalam html Apr 11, 2024 am 06:18 AM

Untuk memasukkan fail JS luaran dalam HTML, gunakan teg <script> dan tentukan URL fail untuk dimuatkan. Anda juga boleh menentukan jenis, tangguh atau atribut tak segerak untuk mengawal cara pemuatan dan pelaksanaan berlaku. Lazimnya, teg <script> hendaklah diletakkan di bahagian bawah bahagian <body> untuk mengelak daripada menyekat pemaparan halaman.

Bagaimana untuk mengelakkan pengalihan halaman dalam WordPress? Bagaimana untuk mengelakkan pengalihan halaman dalam WordPress? Mar 05, 2024 am 09:33 AM

Bagaimana untuk mengelakkan pengalihan halaman dalam WordPress? Dalam pembangunan laman web, kadangkala kami ingin melaksanakan tetapan bukan lompat halaman dalam WordPress, iaitu semasa operasi tertentu, kandungan halaman boleh dikemas kini tanpa menyegarkan keseluruhan halaman. Ini meningkatkan pengalaman pengguna dan menjadikan tapak web lebih lancar. Seterusnya, kami akan berkongsi cara melaksanakan tetapan bukan lompat halaman dalam WordPress dan memberikan contoh kod khusus. Pertama, kita boleh menggunakan Ajax untuk menghalang halaman daripada melompat. Ajax

Perkongsian petua pengoptimuman fungsi carian PHP Perkongsian petua pengoptimuman fungsi carian PHP Mar 06, 2024 am 11:12 AM

Fungsi carian PHP sentiasa menjadi bahagian yang sangat penting dalam pembangunan laman web, kerana pengguna sering menggunakan kotak carian untuk mencari maklumat yang mereka perlukan. Walau bagaimanapun, banyak laman web mempunyai masalah seperti kecekapan rendah dan hasil carian yang tidak tepat semasa melaksanakan fungsi carian. Untuk membantu anda mengoptimumkan fungsi carian PHP, artikel ini akan berkongsi beberapa petua dan memberikan contoh kod khusus. 1. Gunakan enjin carian teks penuh, pangkalan data SQL tradisional adalah kurang cekap apabila memproses kandungan teks dalam jumlah yang besar. Oleh itu, adalah disyorkan untuk menggunakan enjin carian teks penuh, seperti Elasticsearch, Solr, dsb.

Menyahmistikan Pengoptimuman Prestasi Laman Web: Kuasai kaedah ini untuk menjadikan kelajuan tapak web anda melonjak! Menyahmistikan Pengoptimuman Prestasi Laman Web: Kuasai kaedah ini untuk menjadikan kelajuan tapak web anda melonjak! Feb 03, 2024 am 08:00 AM

Rahsia pengoptimuman prestasi laman web: kuasai kaedah ini untuk membuat laman web anda terbang! Dengan perkembangan pesat Internet, laman web telah menjadi saluran penting untuk promosi korporat, paparan produk, dan komunikasi dan interaksi. Walau bagaimanapun, apabila pengguna melawati tapak web, jika kelajuan memuatkan terlalu perlahan dan masa tindak balas terlalu lama, pengalaman pengguna akan berkurangan dengan banyak, malah ia boleh menyebabkan pengguna keluar secara langsung. Oleh itu, pengoptimuman prestasi laman web menjadi semakin penting. Jadi, apakah itu pengoptimuman prestasi laman web? Ringkasnya, pengoptimuman prestasi laman web adalah untuk meningkatkan kelajuan pemuatan laman web melalui satu siri kaedah dan cara teknikal.

See all articles