欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析我對JS延遲異步腳本的思考

 更新時間:2020年10月12日 10:40:43   作者:Peter譚老師  
這篇文章主要介紹了淺析我對JS延遲異步腳本的思考,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

關(guān)于對延遲腳本的思考

asyncdefer屬性的腳本,相信大家都聽說過,但是他的真正執(zhí)行細節(jié)是什么樣子的?很少有文章認真研究它,可能不太有人注重細節(jié),但其實真正有技術(shù)含量的工作和項目,對于性能要求極高,那么細節(jié)就很重要了.需要不斷的實驗自我嘗試

最近幾個月,我一直在研究一些技術(shù),例如linux,操作系統(tǒng),算法等,預(yù)計要持續(xù)學(xué)習(xí)到今年年底。紅寶書第四版出來后,我也是花了很多時間去看。對于延遲腳本,自己也是做了一個實驗,寫下了這篇總結(jié)

什么是延遲腳本?

script標(biāo)簽,帶async和defer屬性等,通過document.createElement('script')創(chuàng)建并且沒有指定script.async=false的腳本默認為異步延遲腳本(必須為非內(nèi)聯(lián)腳本),如下所示:

<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
</head>

<body>

</body>
<script src="./async1.js" async></script>
<script src="./async2.js" async></script>
<script src="./defer1.js" defer></script>
<script src="./defer2.js" defer></script>
<script src="./common1.js"></script>
<script src="./common2.js"></script>
<script src="./common3.js"></script>

</html>

以上7個腳本文件,其中common開頭為非異步延遲腳本,其余的都指定了延遲腳本的模式,分為async和defer兩種

通過document.createElement創(chuàng)建的標(biāo)簽插入默認為async模式

開始實驗

我一共寫了2個async和2個defer標(biāo)簽,其它的都是普通標(biāo)簽.其中async1.js里面有4000行代碼,其它都是一個console.log而已

第一次實驗結(jié)果:

再次刷新頁面(注意我已經(jīng)禁用了瀏覽器緩存),結(jié)果為:

再次刷新,發(fā)現(xiàn)async執(zhí)行時機和順序不確定,但是能確定defer肯定在async之后執(zhí)行。

原因在于:async是告訴瀏覽器,可以不必等到它下載解析完后再加載頁面,也不用等它執(zhí)行完后再執(zhí)行其他腳本,俗稱異步執(zhí)行腳本

看下載執(zhí)行時機和打印結(jié)果的對比

打印結(jié)果:

對應(yīng)的下載執(zhí)行時機

從上面看,下載時機async和普通模式都是同樣并行下載,只有defer是最后才下載(http1.1有并發(fā)數(shù)量限制,可是這里并不是并發(fā)限制,當(dāng)我刪除common的引用后,我發(fā)現(xiàn)defer永遠都是最后下載的)

asyncdefer兩種模式,區(qū)別在于:

  • async是告訴瀏覽器,它不會操作dom,可以不必等到它下載解析完后再加載頁面,也不用等它執(zhí)行完后再執(zhí)行其他腳本,俗稱異步執(zhí)行腳本, 多個async無法保證他們的執(zhí)行順序,例如async1和async2無法按順序執(zhí)行
  • defer是在解析到結(jié)束到</html>標(biāo)簽后才會執(zhí)行,俗稱推遲執(zhí)行腳本,多個defer可以按順序執(zhí)行,例如defer1和defer2可以按順序執(zhí)行(實際上也不保證順序執(zhí)行)
  • 解析到script標(biāo)簽后,async是直接下載
  • 解析到script標(biāo)簽后,defer是最后下載

相同點:

  • 多個async或者defer標(biāo)簽實際上都不能保證順序執(zhí)行
  • 都不會阻塞解析其他script標(biāo)簽內(nèi)容的解析和頁面渲染
  • 他們都會在瀏覽器load事件前執(zhí)行,但是不保證是在DomContentLoad事件前還是后執(zhí)行

影響多個異步腳本的執(zhí)行順序因素

  • 腳本文件大小
  • 網(wǎng)絡(luò)傳輸因素

特殊情況

當(dāng)所有的腳本文件都很小很小的時候,結(jié)果會在很大概率穩(wěn)定在

使用的注意點

  • 異步推遲腳本的執(zhí)行順序并不穩(wěn)定,所有盡量只有一個
  • 使用異步推遲腳本時,應(yīng)該考慮什么場景才使用,而不是濫用它

寫在最后

到此這篇關(guān)于淺析我對JS延遲異步腳本的思考的文章就介紹到這了,更多相關(guān)JS 延遲異步腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScipt驗證URL新方法詳解(2023 年版)

    JavaScipt驗證URL新方法詳解(2023 年版)

    這篇文章主要為大家介紹了JavaScipt驗證URL新方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • HTML5 Shiv完美解決IE(IE6/IE7/IE8)不兼容HTML5標(biāo)簽的方法

    HTML5 Shiv完美解決IE(IE6/IE7/IE8)不兼容HTML5標(biāo)簽的方法

    這篇文章主要介紹了HTML5 Shiv完美解決IE(IE6/IE7/IE8)不兼容HTML5標(biāo)簽的方法,需要的朋友可以參考下
    2015-11-11
  • JS滾動到指定位置導(dǎo)航欄固定頂部

    JS滾動到指定位置導(dǎo)航欄固定頂部

    最近整理一下之前做的一個項目,把滾動條動態(tài)固定頂部的代碼整理出來和大家分享
    2017-07-07
  • JavaScript 點擊頁面上的按紐,彈出層,背景變灰

    JavaScript 點擊頁面上的按紐,彈出層,背景變灰

    點擊頁面上的按紐,彈出一個層,背景變灰,這樣的效果現(xiàn)在網(wǎng)頁應(yīng)用的比較多,這里只是個簡單的實現(xiàn)方式
    2010-06-06
  • 小程序自定義彈框的方法

    小程序自定義彈框的方法

    這篇文章主要為大家詳細介紹了小程序自定義彈框的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • JavaScript如何防止頁面退格鍵回退

    JavaScript如何防止頁面退格鍵回退

    本文主要介紹了JavaScript如何防止頁面退格鍵回退,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 通過javascript的匿名函數(shù)來分析幾段簡單有趣的代碼

    通過javascript的匿名函數(shù)來分析幾段簡單有趣的代碼

    想起自己很久以前學(xué)習(xí)javascript的經(jīng)歷,也曾經(jīng)碰到過幾個由匿名函數(shù)造成的困擾(其中一個就是由閉包引起的),下面就整理幾段簡單代碼討論一下,讓我們大家一起進步。
    2010-06-06
  • JavaScript判斷按鈕被點擊的方法

    JavaScript判斷按鈕被點擊的方法

    javascript代碼判斷按鈕是否被點擊了在項目中經(jīng)常會遇到這個需求,今天小編抽點時間給大家分享一段代碼關(guān)于javascript判斷按鈕是否被點擊的方法,感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • 原生js簡單實現(xiàn)放大鏡特效

    原生js簡單實現(xiàn)放大鏡特效

    這篇文章主要為大家詳細介紹了原生js簡單實現(xiàn)放大鏡特效,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • JavaScript學(xué)習(xí)筆記之ES6數(shù)組方法

    JavaScript學(xué)習(xí)筆記之ES6數(shù)組方法

    ES6給數(shù)組添加了一些新特性,而這些新特性到目前為止完全可以運用到自己的業(yè)務(wù)層。在這一節(jié)中將總結(jié)有關(guān)于ES6給數(shù)組提供一些新特性的使用方法
    2016-03-03

最新評論