我对页面渲染有一些疑问。这是我的html代码:
<body>
<h1>haha</h1>
<img src="a.jpeg" alt="images1">
<img src="b.jpeg" alt="images2">
<script src="public/js/doSomething.js"></script>
<script src="lib/jquery-1.11.3.js"></script>
</body>
我doSomething.js
的执行需要 5 秒:
function doSomething(n){
var start = new Date().getTime() ;
while((new Date().getTime() - start) < 1000 * n){}
}
doSomething(5) ;
我将<script>
标签放在末尾,<body>
以便其他元素在doSomething.js
加载之前显示。但是我的页面在doSomething.js
完成执行之前没有任何结果。
如果我删除 jQuery 脚本,其他 DOM 元素(h1
和images
)将在doSomething.js
加载之前成功显示。
以下是我的问题:
- 为什么在我的示例中 jQuery 会阻止 DOM 渲染?
- 如果我删除 jQuery,并且一切都按我的预期工作,那么我会得到另一个问题。在我的理解中,
<script>
是 DOM 树的一部分,如果没有加载,DOM 树就不会构建完成,那么整个渲染树就不会构建。如果没有构建渲染树,为什么像这样的元素<h1>
可以绘制到页面上?简而言之,为什么移动<script>
到末尾<body>
会使之前的元素呈现在页面上?