這篇文章帶給大家的內容是關於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>
<script defer = "defer"> console.log("a"); </script>
2、async 非同步加載,加載完就執行,async只能載入外部腳本,不能把js寫在script標籤裡
<script type = "text/javascript" aysnc = "aysnc"></script>
以上兩種方法執行時也不阻塞頁面
為了解決瀏覽器相容問題? ?如果1,2,兩種方法同時加載,會導致程式碼重疊覆蓋執行順序的衝突,所以引入第三種方法通用的方法
3、創建script,插入到DOM中,加載完畢後callBack ,
var script = document.createElement('script'); script.type = "text/javescript"; script.src = "demo.js"; // 此时就会加载src地址里面的东西 // 此时会有一个灯塔模式,灯塔模式会产生一个img属性,用来存放地址的加载 document.head.appendChild(script); //----此时就会在页面上展示js里面的内容
當我們在外部js檔案裡面寫一個test函數
var script = document.createElement('script'); script.type = "text/javascript"; script.src = "demo.js"; test(); document.head.appendChild(script);
這裡外部demo.js檔案就不展示了,裡面有一個test函數。結果如下:
test函數執行的時候因為載入需要時間,當test執行時,還沒載入完。所以會顯示test未定義。我們改如何解決這個問題呢?
首先我們就會想到onload事件。
script.onload : 相容性特別好,Safari chrome firefox opera都相容 ;
script.onload = function(){ test(); }
但是呢 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(); //回调函数:当满足一定条件才可以被执行 } }
最後我們封裝函數,實現我們按需載入的功能。
function loadScript(url,callback){ var script = document.createElement('script'); 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('demo.js','test');
相關文章推薦:
【Javascript】zepto原始碼Callback分析
以上是JavaScript中的瀏覽器非同步載入的分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Ajax异常大揭秘,如何应对各种错误,需要具体代码示例2019年,前端开发已经成为互联网行业中不可忽视的重要岗位。而Ajax作为前端开发中最常用的技术之一,能够实现页面异步加载和数据交互,其重要性不言而喻。然而,使用Ajax技术时经常会遇到各种错误和异常,如何应对这些错误是每一位前端开发者必须面对的问题。一、网络错误在使用Ajax发送请求时,最常见的错误就是

Scrapy是一个开源的Python爬虫框架,它可以快速高效地从网站上获取数据。然而,很多网站采用了Ajax异步加载技术,使得Scrapy无法直接获取数据。本文将介绍基于Ajax异步加载的Scrapy实现方法。一、Ajax异步加载原理Ajax异步加载:在传统的页面加载方式中,浏览器发送请求到服务器后,必须等待服务器返回响应并将页面全部加载完毕才能进行下一步操

标题:解决jQuery.val()不起作用的方法及代码示例在前端开发中,经常会使用到jQuery来操作页面元素。其中,获取或设置表单元素的值是常见的操作之一。通常,我们会使用jQuery的.val()方法来实现对表单元素值的操作。然而,有时候会遇到jQuery.val()不起作用的情况,这可能会导致一些问题。本文将介绍如何有效应对jQuery.val(

Vue3中的suspense函数详解:优化异步数据加载在现代网站和应用程序中,异步数据加载是必不可少的。但是,由于网络连接速度的不稳定性,异步数据加载可能导致用户界面的延迟和卡顿。为了解决这个问题,Vue3引入了一个新的suspense函数来优化异步数据加载。suspense函数是Vue3中的一个新特性,它允许您在异步加载数据时展示一个加载中的UI,直到异步

Vue3中的defineAsyncComponent函数详解:异步加载组件的应用在Vue3中,我们经常会遇到异步加载组件的需求。这时我们就可以使用Vue3提供的defineAsyncComponent函数来实现异步加载组件的功能。本文将详细介绍Vue3中defineAsyncComponent函数的用法和应用场景。一、defineAsyncComponent

前端开发者必备:掌握这些优化模式,让网站飞起来!随着互联网的快速发展,网站已经成为企业宣传和交流的重要渠道之一。一个性能优良、加载迅速的网站不仅可以提升用户体验,还可以吸引更多的访问者。作为一名前端开发者,掌握一些优化模式是必不可少的。本文将介绍一些常用的前端优化技术,帮助开发者更好地优化网站。压缩文件在网站开发中,经常使用的文件类型包括HTML、CSS和J

Vue3是一个非常流行的前端框架,它将组件化思想带入到前端开发中,使得开发者能够更快速、更高效地构建复杂的应用程序。在Vue3中,我们经常会使用组件来构建页面,并且使用大量的第三方组件库来扩展我们的功能。但是,加载多个组件可能会导致应用程序的启动速度变慢,这就是为什么我们需要异步加载组件。在Vue3中,提供了一个函数叫做defineAsyncComponen

网站性能优化大揭秘:掌握这些方式,让你的网站飞起来!随着互联网的快速发展,网站已经成为企业宣传、产品展示和交流互动的重要渠道。然而,当用户访问网站时,如果加载速度过慢、响应时间过长,用户体验将会大打折扣,甚至可能直接导致用户离开。因此,网站性能优化变得越来越重要。那么,什么是网站性能优化呢?简单来说,网站性能优化是通过一系列的方式和技术手段,提升网站的加载速


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),