script标签放在底部的好处?

虽然理论上放在哪里都是可以的,但是对于前端页面优化来讲,还是放在底部是最佳的,因为如果JS执行出现错误了,最起码页面中的元素还能加载出来,因为DOM文档是从上往下的顺序执行的。

放在底部哪里?

许多人认为只要放在底部了,无论是“body标签闭合之前”还是在“body标签闭合之后”都是一样的,其实还是有差别的,

因为从HTML 2.0起放在“body标签闭合之后”就是不合标准的。之所以但是浏览器却不会报错,是因为如果在“body标签闭合之后”后再出现script或任何元素的开始标签,都是parse error,浏览器会忽略之前的</body>,即视作仍旧在body内。所以实际效果和写在“body标签闭合之前”之前是没有区别的。

所以,只要是让浏览器做了多余的事都是不好的,虽然差别细微,但是咱们还是按照标准来,放在“body标签闭合之前”。


async和defer属性:

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

   将script放在<head>里,浏览器解析HTML,发现script标签时,会先下载完所有这些script,再往下解析其他的HTML。
讨厌的是浏览器在下载JS时,是不能多个JS并发一起下载的。不管JS是不来来自同一个host,浏览器最多只能同时下载两个JS,且浏览器下载JS时,
就block掉解析其他HTML的工作。将script放在头部,会让网页内容呈现滞后,导致用户感觉到卡。所以yahoo建议将script放在尾部,这样能加速网页加载。
将script放在尾部的缺点,是浏览器只能先解析完整个HTML页面,再下载JS。而对于一些高度依赖于JS的网页,就会显得慢了。所以将script放在尾部也不是最优解,最优解是一边解析页面,一边下载JS。
    所以有一种更modern的方式:使用async和defer。80%的现代浏览器都认识async和defer属性,这两个属性能让浏览器做到一边下载JS(还是只能同时下载两个JS),一边解析HTML。
他的优点不是增加JS的并发下载数量,而是做到下载时不block解析HTML。
 
 
 
  1. <scripttype="text/javascript"src="path/to/script1.js"async></script>
  2. <scripttype="text/javascript"src="path/to/script2.js"async></script> 带async属性的script会异步执行,只要下载完就执行,这会导致script2.js可能先于script1.js执行(如果script2.js比较大,下载慢)。defer就能保证script有序执行,script1.js先执行,script2.js后执行。



更多相关文章

  1. 从动态生成的音频标签中收听audio.ended
  2. js获取点击事件的位置,兼容主流浏览器
  3. 如何测试潜在的“浏览器崩溃”JavaScript?
  4. 为什么jquery click事件在plunker中工作但在任何浏览器中都没有
  5. 浏览器独立文件io在javascript中
  6. 如何访问远程节点。浏览器中的js应用程序,而不是本地主机
  7. 点击a标签,返回上一页
  8. JS实现60s倒计时(亲测有效),及span标签如何使用和禁用onclick事件
  9. FusionCharts的Line.swf做法,我想出现2条图形线,怎么设置graph标签

随机推荐

  1. 文末重磅福利|Python实现回归预测及模型优
  2. 使用 RAIL 模型评估前端性能 [每日前端夜
  3. RPA 2020.11 all in one 安装
  4. Django-bootstrap3|在Django中快速使用Boo
  5. 高中学历的前端又如何?照样可以年薪30万!
  6. 【工具】历史文章分类汇总-V6 | Python数
  7. 爬虫进阶:反反爬虫技巧
  8. 官方示例(十三):3步70行代码开发GIS点坐标技
  9. 5分钟了解Python语言的简单介绍
  10. 内卷?猝死?企业如何利用数据分析提升人效比