傳統上,script元素應該放在頁面的head元素中,但這意味着head元素中的js文件全部下載、解析和執行完成之後,纔會開始呈現頁面的內容,導致瀏覽器在呈現頁面的時候出現延遲,所以,一般都把JavaScript文件放在body元素中頁面內容的後面,即
........
<script src="xx.js"></script>
</body>
備註:css文件加載不會阻塞DOM樹解析,但是會阻塞DOM樹渲染。
關於css文件和JavaScript文件的引入是否堵塞參考https://www.cnblogs.com/heshan1992/p/7029431.html
defer屬性的用途是表明腳本在執行時不會影響頁面的構造。也就是說,腳本會被延遲到整個頁面都解析完畢後再運行。在script元素中設置defer屬性,相當於告訴瀏覽器立即下載,但延遲執行。defer屬性只適用於外部腳本文件。
與defer類似,async只適用於外部腳本文件,並告訴瀏覽器立即下載文件。但與defer不同的是,標記爲async的腳本並不保證按照指定它們的先後順序執行。指定async屬性的目的是不讓頁面等待兩個腳本下載執行,從而異步加載頁面其他內容。