页面渲染过程

来源:21-4 页面加载 - 解答

诺巴蒂

2019-10-28

DOM 和 CSSOM 都创建完才会渲染页面,HTML 页面 是从上到下 执行的,如果这过程被 script 脚本阻塞了(一些 dom 或者 link 在这个script 后面),为什么阻塞前的页面渲染了?

<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style>
    #red {
      background: blue
    }
  </style>
</head>

<body>
  <div id='red'>111</div>
  <script>
    for (let i = 0; i < 1000000; i++) {
      console.log(i)
    }
  </script>
  <div>32131231</div>
</body>
</html>

我试了一下,会先出来一个蓝色背景的 111,过了一会儿才出现 32131231,这时候 dom 树应该还没构建完呀,link 标签放到后面(cssom没构建完)也是同样的现象。

网上的参考资料是这样写的,为啥现象不是这样

CSS 的阻塞
我们提到 DOM 和 CSSOM 合力才能构建渲染树。这一点会给性能造成严重影响:默认情况下,CSS 是阻塞的资源。浏览器在构建 CSSOM 的过程中,不会渲染任何已处理的内容。即便 DOM 已经解析完毕了,只要 CSSOM 不 OK,那么渲染这个事情就不 OK(这主要是为了避免没有 CSS 的 HTML 页面丑陋地“裸奔”在用户眼前)。

写回答

1回答

双越

2019-10-28

你描述的内容我大概看明白了,就没看懂你的问题是什么。可以重新编辑一下问题,先描述现象,再描述问题。问题可以这样描述:预期是xxx,结果却是yyy。

0
7
诺巴蒂
回复
双越
而且我觉得和chrome 本身也有关系,阻塞的时间长短不一样页面表现也不一样
2019-10-29
共7条回复

BAT大牛带你横扫初级前端JavaScript面试(第二版)

BAT高级前端工程师亲授,结合真实面试题,提高面试成功几率

4268 学习 · 817 问题

查看课程