script标签放在页面头部和尾部的区别

script标签放在页面头部和尾部的区别

一般script标签会被放在头部或尾部。头部就是head里面,尾部一般指body里面

------放在各个位置的区别

1.标签放置在标签内部时:
  将script放在里,浏览器解析HTML,发现script标签时,会先下载完所有这些script,再往下解析其他的HTML。讨厌的是浏览器在下载JS时,是不能多个JS并发一起下载的。不管JS是不来来自同一个host,浏览器最多只能同时下载两个JS,且浏览器下载JS时,就block掉解析其他HTML的工作。将script放在头部,会让网页内容呈现滞后,导致用户感觉到卡。

2.标签放置在标签内部时:

将script放在尾部的缺点,是浏览器只能先解析完整个HTML页面,再下载JS。而对于一些高度依赖于JS的网页,就会显得慢了。所以将script放在尾部也不是最优解,最优解是一边解析页面,一边下载JS。

3.标签放置在标签之后时:

首先声明。这在之后插入其他元素,从HTML 2.0起就是不合标准的。按照HTML5标准中的HTML语法规则,如果在后再出现

因为在body以外写script也可能存在其他异常嘛。有什么理由能让开发者推断出后者会更安全呢?实际上在没有充分测试的前提下,如果要进行推断,那么可以推断出后者的风险更大。

因为这是不合标准的行为,而且从有HTML标准以来都是不合标准的,因此浏览器实现不一致或者在这种情况下有bug的风险显然更大。

---------解决方式

所以提出了一种更modern的方式:使用async和defer。80%的现代浏览器都认识async和defer属性,这两个属性能让浏览器做到一边下载JS(还是只能同时下载两个JS),一边解析HTML。他的优点不是增加JS的并发下载数量,而是做到下载时不block解析HTML。

   <script type="text/javascript" src="path/to/script1.js" async></script>  
   <script type="text/javascript" src="path/to/script2.js" async></script>  

如上图我们同时引入两条外部js文件时:
  async属性能保证script会异步执行,只要下载完就执行,这会导致script2.js可能先于script1.js执行(如果script2.js比较大,下载慢)。
defer属性就能保证script有序执行,script1.js先执行,script2.js后执行。

结论

如果可以不考虑支持<IE9的IE,最好的做法是将script标签放在head中,并使用async/defer属性。这样浏览器就能一边下载JS,一边解析其他的HTML。

Google自己的代码script放的也有点乱,有的放在body后面,有的放在body里面,还有的放在head里面。总体来说,放在body里面其实是最常见的做法。

本文只讨论script的位置,至于link和style,还是放在head里的做法比较常见。link也是要下载CSS的啊,为毛不考虑下载CSS阻塞HTML解析的问题呢?其实,一般情况下,JS和CSS,放在head和放在body区别不大。CSS的link放在body也是可以的,只是可能导致页面暂时没有样式。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eric-x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值