詳解關于html,css,js三者的加載順序問題
<head lang="en"> <meta charset="utf-8"> <title></title> <link rel="stylesheet" href="css/*.css" rel="external nofollow" > <script src="js/*.js></script> </head>
DOM文檔的加載順序是由上而下的順序加載;
1、DOM加載到link標簽
css文件的加載是與DOM的加載并行的,也就是說,css在加載時Dom還在繼續(xù)加載構建,而過程中遇到的css樣式或者img,則會向服務器發(fā)送一個請求,待資源返回后,將其添加到dom中的相對應位置中;
2、DOM加載到script標簽
由于js文件不會與DOM并行加載,因此需要等待js整個文件加載完之后才能繼續(xù)DOM的加載,倘若js腳本文件過大,則可能導致瀏覽器頁面顯示滯后,出現(xiàn)“假死”狀態(tài),這種效應稱之為“阻塞效應”;會導致出現(xiàn)非常不好的用戶體驗;
而這個特性也是為什么在js文件中開頭需要$(document).ready(function(){})或者(function(){})或者window.onload,即是讓DOM文檔加載完成之后才執(zhí)行js文件,這樣才不會出現(xiàn)查找不到DOM節(jié)點等問題;
js阻塞其他資源的加載的原因是:瀏覽器為了防止js修改DOM樹,需要重新構建DOM樹的情況出現(xiàn);
3、解決方法
前提,js是外部腳本;
在script標簽中添加 defer=“ture”,則會讓js與DOM并行加載,待頁面加載完成后再執(zhí)行js文件,這樣則不存在阻塞;
在scirpt標簽中添加 async=“ture”,這個屬性告訴瀏覽器該js文件是異步加載執(zhí)行的,也就是不依賴于其他js和css,也就是說無法保證js文件的加載順序,但是同樣有與DOM并行加載的效果;
同時使用defer和async屬性時,defer屬性會失效;
可以將scirpt標簽放在body標簽之后,這樣就不會出現(xiàn)加載的沖突了。
以上所述是小編給大家介紹的關于html,css,js三者的加載順序問題詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
相關文章
js之encodeURI、encodeURIComponent、decodeURI、decodeURIComponent
這篇文章主要介紹了js之encodeURI、encodeURIComponent、decodeURI、decodeURIComponent的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04JS實現(xiàn)獲取來自百度,Google,soso,sogou關鍵詞的方法
這篇文章主要介紹了JS實現(xiàn)獲取來自百度,Google,soso,sogou關鍵詞的方法,結合實例形式分析了js獲取來路頁面的方法與相關搜索引擎關鍵詞的處理技巧,需要的朋友可以參考下2016-12-12Highcharts 非常實用的Javascript統(tǒng)計圖demo示例
官網實例中給出了各式各樣的demo,可以參照document修改自己需要的即可,本文實現(xiàn)的是一個學生成績走勢demo,有需求的朋友可以參考下哈,希望對大家有所幫助2013-07-07詳解JavaScript基于面向對象之創(chuàng)建對象(1)
這篇文章主要介紹了JavaScript基于面向對象之創(chuàng)建對象,對創(chuàng)建對象進行了詳細描述,感興趣的小伙伴們可以參考一下2015-12-12