为什么script标签放在body的底部? 避免加载、解析script标签的过程阻断html的解析,页面出现白屏。 不过可以在script标签上加 async或者defer来避免这种情况。加上defer、async属性,会告诉浏览器解析script标签,下载引入的脚本时,先不执行,等页面解析完毕后再执行。区别在于defer是按照先后顺序,async不按照顺序。 借鉴自:https://segmentfault.com/a/1190000006778717
我的简短解释:如果script标签不放在body底部,解析器解析html的过程中,遇到<script>引用外部脚本的标签,浏览器就会请求js文件,然后开始下载,同时解析器会停止解析html,等js文件下载完后,解析器才会继续解析html.
stackoverflow上的解释:转载自:https://stackoverflow.com/questions/436411/where-should-i-put-script-tags-in-html-markup
转载自:https://segmentfault.com/a/1190000004292479
1、浏览器请求到Html代码后,开始构建DOM树,同是并发请求js、图片
2、下载css文件,然后构建CSSOM树
3、CSSOM树和DOM树一起构建render Tree
4、layout : Render Tree后,浏览器知道了网页的有哪些节点、各个节点的CSS定义以及他们的从属关系,下一步就是Layout,计算各个几点的位置布局
5、 Painting: 按照算出来的规则,通过显卡,把内容画到屏幕上。