在我們編寫代碼的時(shí)候,會(huì)在頁(yè)面內(nèi)使用<script>標(biāo)簽來(lái)寫JS,雖然理論上script標(biāo)簽的位置放在哪里可以,但是還是有一點(diǎn)區(qū)別的。
為什么很多人把script標(biāo)簽放在底部
初學(xué)者在學(xué)習(xí)JS的時(shí)候看見很多DEMO里面的script標(biāo)簽寫在底部,但是卻不是很清楚為什么,下面來(lái)解釋一下:
雖然理論上放在哪里都是可以的,但是對(duì)于前端頁(yè)面優(yōu)化來(lái)講,還是放在底部是最佳的,因?yàn)槿绻鸍S執(zhí)行出現(xiàn)錯(cuò)誤了,最起碼頁(yè)面中的元素還能加載出來(lái),因?yàn)镈OM文檔是從上往下的順序執(zhí)行的。
按照傳統(tǒng)的做法,所有script元素都應(yīng)該放在頁(yè)面的head元素中,這種做法的目的就是把所有外部文件(包括css和JavaScript文件)的引用都放在相同的地方,可是,在文檔的head元素中包含所有JavaScript文件,意味著必須等到全部JavaScript代碼都被下載、解析和執(zhí)行完成之后,才能開始呈現(xiàn)頁(yè)面內(nèi)容(瀏覽器在遇到body標(biāo)記時(shí)才開始呈現(xiàn)內(nèi)容)。對(duì)于那些需要很多JavaScript代碼的頁(yè)面來(lái)說(shuō),這無(wú)疑會(huì)導(dǎo)致瀏覽器在呈現(xiàn)頁(yè)面時(shí)出現(xiàn)明顯的延遲,而延遲期間的瀏覽器窗口中將是一片空白。為避免這個(gè)問(wèn)題,現(xiàn)代web應(yīng)用程序一般都把全部JavaScript引用放在<body>元素中頁(yè)面內(nèi)容的后面。
script標(biāo)簽在body標(biāo)簽內(nèi)還是外
許多人認(rèn)為只要放在底部了,無(wú)論是“body標(biāo)簽閉合之前”還是在“body標(biāo)簽閉合之后”都是一樣的,其實(shí)還是有差別的,因?yàn)閺腍TML 2.0起放在“body標(biāo)簽閉合之后”就是不合標(biāo)準(zhǔn)的。之所以但是瀏覽器卻不會(huì)報(bào)錯(cuò),是因?yàn)槿绻凇癰ody標(biāo)簽閉合之后”后再出現(xiàn)script或任何元素的開始標(biāo)簽, 都是parse error,瀏覽器會(huì)忽略之前的</body>,即視作仍舊在body內(nèi)。所以實(shí)際效果和寫在“body標(biāo)簽閉合之前”之前是沒有區(qū)別的。
所以,只要是讓瀏覽器做了多余的事都是不好的,雖然差別細(xì)微,但是還是應(yīng)該按照標(biāo)準(zhǔn)來(lái),放在body標(biāo)簽閉合之前。