href和src的區(qū)別
一般加載CSS用href,并放在頭部枕赵;加載script用src,放在body內(nèi)的下方拷窜。
href
是hypertext reference的縮寫涧黄,表示超文本引用赋荆,用來建立當前元素和文檔間的鏈接。常用的有l(wèi)ink窄潭,a。
當CSS使用href引用月帝,瀏覽器會識別該文檔問CSS均抽,并行下載嫁赏,不會停止對當前文檔的加載油挥。
src
是source的縮寫,是資源攘乒,頁面必不可少的一部分惋鹅,src指向的內(nèi)容會嵌入到文檔中當前標簽的位置则酝。常用的有img, script, iframe。
當script使用src引用虽填,瀏覽器解析到該元素時會停止對文檔的渲染睁本,直到該資源加載完成。這也是將script放底部而不是頭部的原因。
把CSS放頭部挚瘟,script放下方的原因
CSS放頭部在加載html生成DOM tree的時候饲梭,就可以同時對DOM tree進行渲染。這樣可以防止閃跳憔涉,白屏或者布局混亂。
javascript放在后面
javascript可能會改變DOM tree的結(jié)構(gòu)布蔗,所以需要一個穩(wěn)定的DOM tree藤违。
javascript加載后會立即執(zhí)行纵揍,同時會阻塞后面的資源加載议街。(javascript加載和執(zhí)行的特點)
為什么將css放在頭部,js放在尾部可以增加頁面的性能
現(xiàn)在瀏覽器為了更好的用戶體驗吧雹,渲染引擎會嘗試盡快在屏幕上顯示內(nèi)容涂身,它不會等到所有的HTMl元素解析之后在構(gòu)建和布局dom樹雄卷,所以部分內(nèi)容將被解析并顯示蛤售。也就是說瀏覽器能夠渲染不完整的dom樹和cssom,盡快的減少白屏的時間揣钦。
假如我們將js放在header漠酿,js將阻塞解析dom,dom的內(nèi)容會影響到dom樹的繪制炒嘲,導致dom繪制延后。
所以說我們會將js放在后面夫凸,以減少dom繪制的時間,但是不會減少DOMContentLoaded被觸發(fā)的時間呀洲。