浏览器的渲染是自上而下的,css的加载会阻塞js的执行,js的加载会阻塞dom的渲染。
我们一般将css放在head标签里引入,js放在body结束标签之前引入。
引入
- 如果你需要动态创建文档或者修改dom,你可以把js放在body结束标签之前,在dom解析完之后执行js,如果不需要可以放在head里面。
- css的加载不影响js的加载,但是会影响js的执行,因此会阻塞,所以当你的js文件不依赖css文件时,可以把js放在css的前面。
思考
1.如果把css放下body里面会怎样?
- 会发生重绘。因为这时候dom已经解析完了,又要重新去计算css属性。
- 监听DOMContentLoaded,在文档结构解析完之后触发。
- async/defer异步加载
asyns/defer
asyns:加载和渲染后续文档的过程和脚本的加载和执行并行,不保证前后顺序,如果脚本前后有依赖性,可能会出错。
defer:加载后续文档的过程和脚本的加载并行,但是脚本的执行要在所有元素解析完之后,document.DOMContentLoaded触发(同步js执行完毕)之前完成。相当于把脚本放页面底部。