网站加载的整个完整过程了。
1.首先浏览器从服务器接收到html代码,然后开始解析html
2.构建DOM树(根据html代码自顶向下进行构建),并且在同时构建渲染树
3.遇到js文件加载执行,将阻塞DOM树的构建;遇到css文件,将阻塞渲染树的构建
(script标签中的defer属性:构建DOM树的过程和js文件的加载异步(并行)进行,但是js文件执行需要在DOM树构建完成之后
script标签中的async属性:构建DOM树、渲染树的过程和js文件的加载和执行异步(并行)进行)
综上所述,script标签最好放在</body>标签的前面,因为放在所有body中的标签后面就不会出现网页加载时出现空白的情况,可以持续的给用户提供视觉反馈,同时在有些情况下,会降低错误的发生。
而css标签应该放在<head></head>标签之间,因为如果放在</body>标签的前面,那么当DOM树构建完成了,渲染树才构建,那么当渲染树构建完成,浏览器不得不再重新渲染整个页面,这样造成了资源的浪费。效率也不高。如果放在<head></head>之间,浏览器边构建边渲染,效率要高的多。