-
-
Notifications
You must be signed in to change notification settings - Fork 3.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[html] 第22天 js放在html的<body>和<head>有什么区别? #74
Comments
<body>
和<head>
有什么区别?
浏览器解析html从上往下执行,放在head先执行js了,会造成dom树还没有生成就执行js。 |
head标签准确来说,是对html文档的一种配置 |
|
js 放在
把 js 放到 参考文章: |
在浏览器解析HTML中的时候,如果在head标签中遇到了script标签并且是同步执行的,那么就会影响文档的加载,如果引入的过多的同步脚本文件 那么在一般业务中我们如何做呢?一般情况下是在网站中,同步在head加载的脚本通常是业务必须的,比如说我要注册一个window对象,或者用document.write写入一些内容,或者是业务需求,我们可以用head来做加载, |
上面很多都是纸上谈兵,这个回答相对靠谱。我做一些补充。 关于这个问题,我自己写个后端延迟脚本试验过。讲清楚区别,首先要了解浏览器渲染大过程。我们老生常谈,一般浏览器渲染过程分为,html解析-->dom树构建-->渲染树构建-->渲染树布局-->渲染树呈现 这样一个过程。 在以上过程中,需要了解的是,渲染树构建和dom树构建的区别,渲染树实际上是css展示样式和dom树结合创建过程,此过程依赖css的样式。而渲染树布局依赖css的布局样式。 基于上面的论点,也就是说,页面需要展示内容的过程是依赖css,而普通js脚本的加载又是依赖css正在加载的脚本的。 接下来回到上面的问题,js放在head和放在body的区别首先要搞清楚是有没css影响,有css影响时候是在css前还是css后面。
放在body后,html解析到这里的时候dom树基本构建完成。js脚本加载和执行都不会有任何影响。而且这两种都页面解析是停止的。需要讨论异步情况,要关注defer和async两个属性。这里不做深究。
|
|
html渲染是从上至下,依次构建DOM树=>渲染树,如果遇到CSS会阻止渲染树的构建,如果遇到脚本(JS)则DOM树和渲染树都会停止构建。 |
get () |
js放在head里面会阻塞dom树的加载 |
放在中,则无法直接获取网页中的元素,获取元素的代码需要放在window.onload中 |
|
放在body中,会在页面加载的时候执行 |
js放在html的
<body>
和<head>
有什么区别?The text was updated successfully, but these errors were encountered: