美文网首页
【知识点】CSS阻塞

【知识点】CSS阻塞

作者: 李李李李李晓华 | 来源:发表于2019-03-21 22:42 被阅读0次
    一、前言

    突然想起来,有学生问我说“老师,我的CSS和JS放在哪里都能执行,为什么大多数我们书写要有固定的位置,为什么不能乱放?明明可以执行呀”。

    那我今天就解释一下吧~

    二、加载和渲染

    页面的的加载和渲染也是一个非常复杂的过程
    这个文章里需要你知道,页面能成功显示在你的电脑上,其实是至少要经历先 加载 后 渲染 的两个步骤
    加载暂时可以理解为 先把页面下载下来,然后开始读一下
    渲染就是,把你读到的内容 在浏览器窗口展示出来

    三、css阻塞

    其实,正常情况下css是阻塞html的DOM树渲染的
    为什么呢?
    正常我们的代码执行顺序是这样的:

    <style>
        .......
    </style>
    
    <div>
        ......
    </div>
    
    • 测试发现:当css没有加载完成的时候,html其实已经加载解析完成了,我们在控制台是可以打印出来html标签的
    • 但是你会发现html并没有展现在浏览器上,因为它要等着css加载完成,然后在把样式给添加上以后才会进行渲染展示给用户。
      如果css加载的时候不阻塞DOM树渲染,那么等html展示给用户的时候,然后css加载完成添加样式,这时候html就会被重新渲染(也叫做重绘或者回流)。这样肯定是影响性能的。
    四、重绘与回流

    页面重绘:当render tree(渲染树)中的一些元素需要更新属性,但这些属性只会影响元素的外观、风格,而不会影响到元素的布局,此类的页面渲染叫作页面重绘。
    页面回流:当render tree(渲染树)中的一部分(或全部)因为元素的规模尺寸、布局、隐藏等改变而引起的页面重新渲染(或者叫作重新构建绘制)

    五、css的书写位置
    • 首先要明白,无论css写在哪里,这个css都能生效。(css阻塞)
    • 那我就能随便乱写了???
    1. 由于网页文档是自上而下加载并解析的,假设将style标签书写在了</body>的后面,在读取到style标签之前,整个网页文档已经渲染得差不多了
    2. 这时候突然发现存在一个style标签,并且style标签中的内容针对网页中某些元素的样式进行了设置,于是浏览器只好重新为每个元素计算样式,再加载出来(重绘与回流)。
    3. 所以不建议这样写,否则会导致网页的加载速度的变慢。

    相关文章

      网友评论

          本文标题:【知识点】CSS阻塞

          本文链接:https://www.haomeiwen.com/subject/wvdhvqtx.html